关于c++:C-STL-map获取键对应的值

35次阅读

共计 1523 个字符,预计需要花费 4 分钟才能阅读完成。

一、办法

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 容器查找,进而获取值
具体代码在这里就不写了

正文完
 0