前面我们基本了解了unordered_map容器,接下来我们开始学习unordered_map容器的迭代器。由于哈希表的缘故,元素根据键(key)被哈希函数分配到不同的地址,导致元素间地址不连续,所以unordered_map容器的迭代器和同我们之前学过的map容器、set容器的迭代器不一样,它没有”顺序“这个概念,属于前向迭代器,只能通过++的操作而不能通过--的方式访问元素,不支持+8或-3等随机访问。unordered_map容器有正向迭代器begin()、end(),常量迭代器cbegin()、cend()。下面让我们通过代码的方式来学习unordered_map容器的迭代器:
#include <iostream> #include<unordered_map>//需要包含头文件 #include<string> using namespace std; /*unordered_map容器的迭代器*/ void test() { unordered_map<string,string> ump{ {"C语言教程","https://www.dotcpp.com/BbNkeAOzdW.php/cms/archives?ref=addtabs"}, {"计算机二级C语言","https://www.dotcpp.com/course/erjic/"}, {"数据结构教程","https://www.dotcpp.com/course/ds/"}, {"ACM与蓝桥杯竞赛指南","https://www.dotcpp.com/course/acm/"}, {"算法竞赛教程","https://www.dotcpp.com/course/algorithm/"}, };//初始化列表 cout << "C语言网有很多学习教程,比如:\n" ; /*迭代器遍历ump*/ for(unordered_map<string,string>::iterator it = ump.begin();it!=ump.end();++it) { cout <<"想要学习" << it->first << ",其的网址是:【" << it->second << "】\n"; } /*1. unordered_map容器的迭代器属于正向迭代器,禁止:*/ /*ump.end()--*/ /* 2.常量迭代器禁止修改!*/ /* ump.cbegin()->first=" ",ump.cbegin()->second=" "*/ /*3.没有反向迭代器*/ /*cout << (ump.end()--)->first << " " << (ump.end()--)->second << '\n'; */ } int main() { test(); return 0; }
编译结果如下:
成功编译!
总结:由于哈希表的特性,使得unordered_map容器“无序”,所以它不在乎“顺序”没有“反向”这个概念,属于前向迭代器,只能进行++操作。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程