在基本掌握unordered_map容器及其迭代器的基础下,本节将带领读者一起学习如何获取unordered_map容器中元素的value。
前面我们提到unordered_map容器和map容器一样都重载了'[]'符号,所以能够通过'[]'添加或查看value;还有find()输入key获取指向value的迭代器;其实我们还能通过at()、equal_range()(此时equal_range()使用是基于unordered_map容器键存在的唯一性)来获取value,count()查看value是否存在。
下面我们将通过代码来分别展示这4种方法:
#include<bits/stdc++.h>//万能头,以效率为中心 #include<string> #include<utility> #include<unordered_map>//包含头文件,养成好习惯 /*3种访问unordered_map中value的方法*/ using namespace std; void test() { unordered_map<int ,string> ump{{0,"Dptcpp"},{1,"编程问答"},{2,"计算机二级C语言"},{3,"数据结构教程"},{4,"Java教程"}};//建议这样初始化 ,直观具体 /*1.at()*/ cout << "找出所有key=4的值:"<<ump.at(4)<<'\n'; /*2.find()*/ cout << "找出所有key=3的值:"<< ump.find(3)->second << '\n'; /*3.'[]'*/ cout << "找到key=0的值:" << ump[0] << "\n"; /*4.equal_range()*/ pair<unordered_map<int ,string>::iterator,unordered_map<int ,string>::iterator > range = ump.equal_range(1); cout << "找到key=1的值:" << range.first->second ; } int main(){ test(); return 0; }
编译结果如下:
成功根据指示键找到值!
在知道key值的情况下,我们最好使用at(),其次是find(),最后是'[]',原因在于如果没有存在key="输入参数"的元素,at()和find()都会报错,而'[]'直接给你创建一个“[输入的key]=默认值的元素(不同数据类型有不同的默认值),虽然不存在报错问题,但是却失去了对数据的绝对控制,破坏数据的完整性,equal_range()最不推荐了,但读者也要知道通过它也能获取元素的value。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程