01 如何更改已有key的value值
1、填充容器
方式一:以初值列的形式传进去
std::map<int, float> vmap;
vmap.insert({1, 2.0});
vmap.insert({2, 3.0});
方式二:pair<>
std::map<int, float> vmap;
vmap.nisert(std::pair<int, float>(1, 2.0));
vmap.nisert(std::pair<int, float>(2, 3.0));
方式三:赋值
std::map<int, float> vmap;
vmap[1] = 2.0;
vmap[2] = 3.0;
2、获取key对应的value
方式一:使用map[key]
std::map<int, float> vmap;
vmap.insert({1, 2.0});
vmap.insert({2, 3.0});
float v1 = vmap[1];
float v2 = vmap[2];
float v3 = vmap[3];
如果key未在容器内,则插入带这个key的元素。
方式二:使用map.at(key)
std::map<int, float> vmap;
vmap.insert({1, 2.0});
vmap.insert({2, 3.0});
float v1 = vmap.at(1);
float v2 = vmap.at(2);
float v3 = vmap.at(3);
返回key对应的value值;如果不存在这样的元素则抛出out_of_range异常。
3、修改已有key的value
同样是两种方式,operator[]和at()。
std::map<int, float> vmap;
vmap.insert({1, 2.0});
vmap.insert({2, 3.0});
vmap.at(1) = 5.0;
vmap[2] = 6.0;
还可以更复杂一点的操作,先删除原来的key,再重新插入key和value。
std::map<int, float> vmap;
vmap.insert({1, 2.0});
vmap.insert({2, 3.0});
vmap[2] = 6.0;
vmap.erase(2);
vmap.insert({2, 4.123});
02 由key找value
std::map<int, float> vmap = { {1,1.3},{2, 2.3},{3, 3.4},
{4, 4.5},{5, 5.6},{6, 6.7},{7, 7.8} };
//由key找value//
auto poskey = vmap.find(5);
if (poskey != vmap.end())
{
cout << poskey->first << "----" << poskey->second << "\n";
}
03 由value找key
std::map<int, float> vmap = { {1,1.3},{2, 2.3},{3, 3.4},
{4, 4.5},{5, 5.6},{6, 6.7},{7, 7.8} };
//找到value为3.4的key,lamda表达式中的return使用了fabs考虑到浮点误差
auto posvalue = find_if(vmap.begin(), vmap.end(),
[](const pair<int, float>& elem) {
return fabs(elem.second - 3.4) < 0.001;
});
if (posvalue != vmap.end())
{
cout << "key: " << posvalue->first
<< " value: " << posvalue->second << "\n";
}