很可能这个问题已经被问过了,但我找不到它。
每次我定义一个std::map并想插入一些值时,我使用这段代码:
using IntVector = vector < int > ;
map<int, IntVector> mapTmp;
int iKey = 7;
int iVal = 9;
if (mapTmp.find(iKey) == mapTmp.end())
mapTmp.insert(pair<int, IntVector>(iKey, IntVector()));
mapTmp[iKey].push_back(iKey);
让我感到烦恼的是这三行代码:
if (mapTmp.find(iKey) == mapTmp.end())
mapTmp.insert(pair<int, IntVector>(iKey, IntVector()));
mapTmp[iKey].push_back(iVal);
Python提供了一个非常有用的dict函数,叫做:setdefault,它可以将那三行代码优雅地合并为一行。如果我想在C++中写出它的话,应该是这样的:
mapTmp.setdefault(iKey, IntVector()).push_back(iVal);
问题
C++
是否提供此功能?- 如果不是,每个人都要一直写那三行吗?
!mapTmp.count(iKey)
可以替换mapTmp.find(iKey) == mapTmp.end()
,而{iKey, {}}
可以替换pair<int, IntVector>(iKey, IntVector())
。在这种情况下,它们是合适的替代方案。 - chrismake_pair(iKey,IntVector())
。 - celticminstrel