一、方法
1、通过[]获取
类似于访问数组元素的方式。
std::map<int, string> mapInfo{ {1,"test"},{2,"lin"},{3,"wei"} };
string strData = mapInfo[1];
std::cout << "strData: " << strData << std::endl;
结果如下:
注意:
1)只有当 map 容器中确实存有包含该指定键的键值对,借助重载的 [ ] 运算符才能成功获取该键对应的值
2)若当前 map 容器中没有包含该指定键的键值对,则此时使用 [ ] 运算符将不再是访问容器中的元素,而变成了向该 map 容器中增添一个键值对
std::map<int, string> mapInfo{ {1,"test"},{2,"lin"},{3,"wei"} };
mapInfo[5] = "li";
std::map<int, string>::iterator mapIter = mapInfo.begin();
for (; mapIter != mapInfo.end(); mapIter++)
{
std::cout << "key: " << mapIter->first << " value: " << mapIter->second << std::endl;
}
结果如下:
3)其中,该键值对的键用 [ ] 运算符中指定的键,其对应的值取决于 map 容器规定键值对中值的数据类型,如果是基本数据类型,则值为 0;如果是 string 类型,其值为 "",即空字符串(即使用该类型的默认值作为键值对的值)
4)[]具有添加新的键值对的前提是:当前map容器中不存在新添加的键
5)如map容器中已存在对应键,执行map[key] = value是修改键key的值,而不是为 map 容器添加新键值对
mapInfo[5] = "wne";
mapIter = mapInfo.begin();
for (; mapIter != mapInfo.end(); mapIter++)
{
std::cout << "mod key: " << mapIter->first << " value: " << mapIter->second << std::endl;
}
结果如下:
2、at()
需要指定key,才能从容器中找到该键对应的值;如果在当前容器中查找失败,该方法不会向容器中添加新的键值对,而是直接抛出 out_of_range 异常。
std::map<int, string> mapInfo{ {1,"test"},{2,"lin"},{3,"wei"} };
mapInfo[5] = "li";
try
{
std::cout << mapInfo.at(3) << std::endl;
std::cout << mapInfo.at(10) << std::endl;
}
catch (const std::exception&)
{
std::cout << "调用at获取键对应的值异常" << std::endl;
}
结果如下:
3、find
如果查找成功,该迭代器指向查找到的键值对;反之,则指向 map 容器最后一个键值对之后的位置(和 end() 成功方法返回的迭代器一样)。
std::map<int, string> mapInfo{ {1,"test"},{2,"lin"},{3,"wei"} };
mapInfo[5] = "li";
std::map<int, string>::iterator mapIter = mapInfo.find(5);
if (mapIter != mapInfo.end())
{
std::cout << mapIter->first << " " << mapIter->second << std::endl;
}
结果如下:
4、若以上方法都不能获取到值,那只能遍历整个map容器查找,进而获取值
具体代码在这里就不写了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。