前面我们基本了解了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容器的迭代器

成功编译!

总结:由于哈希表的特性,使得unordered_map容器“无序”,所以它不在乎“顺序”没有“反向”这个概念,属于前向迭代器,只能进行++操作。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)