我想在迭代地图时增加一对的双倍。
地图是这样创建的:
typedef pair<string,string> Name;
map<Name,double> paidEmploy;
从cin获取所有内容并将其添加到地图后,如果名称已经在地图中(显然),则不会添加对象。如果插入失败,我遍历地图以找到已插入名称的位置。然后我想访问地图的双倍以增加下一个数量。我该如何访问?
这是我到目前为止所做的事情:
map<Name,double> paidEmploy;
string line, fn, ln, date;
double paid;
while(getline(cin, line)){
istringstream(line) >> date >> fn >> ln >> paid; // assume all lines are correct
if(paidEmploy.insert(pair<pair<string,string>,double>(pair<string,string>(fn,ln),paid)).second == false){
for(auto it = paidEmploy.begin(); it != paidEmploy.end(); it++){
if(it->second.first == fn && it->second.second == ln){
it->third += paid;
break;
}
}
}
}
答案 0 :(得分:2)
在您的情况下,您可以这样做:
paidEmploy[std::make_pair(fn, ln)] += paid;
或者如果你真的想使用插入结果:
auto p = paidEmploy.insert(pair<pair<string, string>, double>(std::make_pair(fn, ln), paid));
if (p.second == false) {
p.first.second += paid;
}
答案 1 :(得分:0)
for(auto it = paidEmploy.begin(); it != paidEmploy.end(); it++){
if(it->fist.first == fn && it->fist.second == ln){
it->second += paid;
break;
}
}
答案 2 :(得分:0)
你应该检查it->first not it->second
。地图如下
A=>B
即A映射到B.
在您的情况下,A
为pair<string,string>
而B
为double
it->first //access A ie access the pair<string,string>
it->second //access B ie access the double
if(it->first.first == fn && it->first.second == ln){
it->second += paid;
此外,您正在搜索地图中的条目,该条目首先破坏了地图的位置。
答案 3 :(得分:0)
map :: insert给出插入的位置,或者如果键已经存在,则受影响的键的位置(第二个为false)。因此,无需再次搜索。