C++ STL 标准库为 unordered_map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,unordered_map 容器迭代器只能进行 ++p
、p++
、--p
、p--
、*p
操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。
值得一提的是,相比序列式容器,unordered_map 容器提供了更多的成员方法,通过调用它们,我们可以轻松获取具有指定含义的迭代器。
成员方法 | 功能 |
---|---|
begin() | 返回指向容器中第一个键值对的正向迭代器。 |
end() | 返回指向容器中最后一个键值对之后位置的正向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对。 |
find(key) | 查找以 key 为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。 |
equal_range(key) | 返回一个 pair 对象,其包含 2 个迭代器,用于表明当前容器中键为 key 的键值对所在的范围。 |
使用 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
,如下图所示:
我们使用了 unordered_map 的迭代器,访问了 unordered_map 的所有元素。
使用 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
,如下图所示:
我们使用了 cbegin 和 cend 反向迭代器,遍历了 unordered_map 的所有元素。
C++ STL 标准库为 unordered_map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,unordered_map 容器迭代器只能进行 ++p
、p++
、--p
、p--
、*p
操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。