C++ STL 标准库为 multimap 容器配备的是双向迭代器(bidirectional iterator)。这意味着,multimap 容器迭代器只能进行 ++p
、p++
、--p
、p--
、*p
操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。
值得一提的是,相比序列式容器,multimap 容器提供了更多的成员方法,通过调用它们,我们可以轻松获取具有指定含义的迭代器。
成员方法 | 功能 |
---|---|
begin() | 返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
end() | 返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
rbegin() | 返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
rend() | 返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
crbegin() | 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
crend() | 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
find(key) | 在 multimap 容器中查找键为 key 的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
lower_bound(key) | 返回一个指向当前 multimap 容器中第一个大于或等于 key 的键值对的双向迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
upper_bound(key) | 返回一个指向当前 multimap 容器中第一个大于 key 的键值对的迭代器。如果 multimap 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
equal_range(key) | 该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的键为 key 的键值对(multimap 容器键值对唯一,因此该范围最多包含一个键值对)。 |
使用 begin 和 end 迭代器访问元素
#include <iostream>
#include <map>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
multimap<int, string> multimap1{{1, "Mon"}, {2, "Thu"}, {3, "Wed"}, {1, "mon"}};
for(auto iter = multimap1.begin(); iter != multimap1.end(); ++iter)
{
cout << iter->first << " " << iter->second << endl;
}
return 0;
}
因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ multimap.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们使用了 multimap 的迭代器,访问了 multimap 的所有元素。
使用 crbegin 和 crend 迭代器访问元素
#include <iostream>
#include <map>
using namespace std;
int main()
{
cout << "嗨客网(www.haicoder.net)\n" << endl;
multimap<int, string> multimap1{{1, "Mon"}, {2, "Thu"}, {3, "Wed"}};
for(auto iter = multimap1.crbegin(); iter != multimap1.crend(); ++iter)
{
cout << iter->first << " " << iter->second << endl;
}
return 0;
}
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们使用了 crbegin 和 crend 反向迭代器,遍历了 multimap 的所有元素。
C++ STL 标准库为 multimap 容器配备的是双向迭代器(bidirectional iterator)。这意味着,multimap 容器迭代器只能进行 ++p
、p++
、--p
、p--
、*p
操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较。