如何在 C++11 中访问对<对<字符串、字符串>、双精度>的双精度

How do I access the double of pair<pair<string,string>,double> in C++11

本文关键字:gt 双精度 字符串 lt C++11 访问      更新时间:2023-10-16

我希望在遍历映射时增加一对的双倍值。

地图是这样创建的:

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

在您的情况下,您可以简单地执行:

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;
}
 for(auto it = paidEmploy.begin(); it != paidEmploy.end(); it++){
            if(it->fist.first == fn && it->fist.second == ln){
                it->second += paid;
                break;
            }
        }

map::insert给出插入的位置,或者如果键已经存在,则给出受影响键的位置(第二个为false(。因此,没有必要再次搜索。

您应该检查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;

此外,您正在搜索地图中的条目,该条目会破坏最初拥有地图的点。