如何在 C++11 中访问对<对<字符串、字符串>、双精度>的双精度
How do I access the double of pair<pair<string,string>,double> in C++11
我希望在遍历映射时增加一对的双倍值。
地图是这样创建的:
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在您的案例中,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;
此外,您正在搜索地图中的条目,该条目会破坏最初拥有地图的点。
相关文章:
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- 高精度双精度的 Sprintf 格式化问题
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 将指针数组分配给双精度
- C++如何将字符串逐行转换为双精度
- 长双精度C++是IEEE二进制128的实现吗?