如何访问对<pair <string,string>,double&gt;的双精度?在C ++ 11中

时间:2015-07-03 19:42:27

标签: c++ c++11 dictionary iterator

我想在迭代地图时增加一对的双倍。

地图是这样创建的:

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;
            }
        }
    }
}

4 个答案:

答案 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. 在您的情况下,Apair<string,string>Bdouble

 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)。因此,无需再次搜索。