c++ - 如何在 C++11 中访问 double 的 pair<pair<string,string>,double>

标签 c++ c++11 dictionary iterator

我希望在遍历 map 时增加一对的两倍。

map 是这样创建的:

typedef pair<string,string> Name;
map<Name,double> paidEmploy;

在我从 cin 获取所有内容并将其添加到 map 后,如果名称已经在 map 中(很明显),它不会添加对象。如果插入失败,我将遍历 map 以查找已插入名称的位置。然后我想访问 map 的两倍以增加下一个数量。我如何访问它?

这是我目前所做的:

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

关于c++ - 如何在 C++11 中访问 double 的 pair<pair<string,string>,double>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213319/

相关文章:

ios - 在 iOS 中将具有匹配结果的数组排序为第一个,不匹配的结果为下一个

arrays - 字典追加的 Swift 数组

c++ - 使用可编辑的 QComboBox 从列表中选择值或获取手动输入

c++ - VS 2010 中 C++ 中的 static_cast 无法从 void* 转换为 size_t 错误

c++ - 在函数调用中,为什么 nullptr 不匹配指向模板对象的指针?

c++ - 如何使用与成员初始值设定项列表一起使用的 static_assert

c++ - C/C++ 预处理错误

c++ - C++11 auto 关键字是否针对所有情况进行了准确定义?或者 : how does auto know what I intend?

c++ - 如何将奇怪的重复模板模式用于桥接模式?

JavaScript 函数参数 : positional -> map transition