STL unordered_map迭代器

STL unordered_map迭代器教程

C++ STL 标准库为 unordered_map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,unordered_map 容器迭代器只能进行 ++pp++--pp--*p 操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。

值得一提的是,相比序列式容器,unordered_map 容器提供了更多的成员方法,通过调用它们,我们可以轻松获取具有指定含义的迭代器。

STL unordered_map迭代器详解

成员函数列表

成员方法 功能
begin() 返回指向容器中第一个键值对的正向迭代器。
end() 返回指向容器中最后一个键值对之后位置的正向迭代器。
cbegin() 和 begin() 功能相同,只不过在其基础上增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对。
cend() 和 end() 功能相同,只不过在其基础上,增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对。
find(key) 查找以 key 为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。
equal_range(key) 返回一个 pair 对象,其包含 2 个迭代器,用于表明当前容器中键为 key 的键值对所在的范围。

案例

unordered_map begin和end迭代器

使用 begin 和 end 迭代器访问元素

#include <iostream> #include <unordered_map> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; unordered_map<int, string> unordered_map1{{1, "Mon"}, {2, "Thu"}, {3, "Wed"}}; for(auto iter = unordered_map1.begin(); iter != unordered_map1.end(); ++iter) { cout << iter->first << " " << iter->second << endl; } return 0; }

因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ unordered_map.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

05_unordered_map迭代器.png

我们使用了 unordered_map 的迭代器,访问了 unordered_map 的所有元素。

unordered_map cbegin和cend迭代器

使用 cbegin 和 cend 迭代器访问元素

#include <iostream> #include <unordered_map> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; unordered_map<int, string> unordered_map1{{1, "Mon"}, {2, "Thu"}, {3, "Wed"}}; for(auto iter = unordered_map1.cbegin(); iter != unordered_map1.cend(); ++iter) { cout << iter->first << " " << iter->second << endl; } return 0; }

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

06_unordered_map迭代器.png

我们使用了 cbegin 和 cend 反向迭代器,遍历了 unordered_map 的所有元素。

STL unordered_map迭代器教程

C++ STL 标准库为 unordered_map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,unordered_map 容器迭代器只能进行 ++pp++--pp--*p 操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。