成员方法 | 功能 |
---|---|
begin() | 返回指向容器中第一个(注意,是已排好序的第一个)键值对的双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
end() | 返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
rbegin() | 返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
rend() | 返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
crbegin() | 和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
crend() | 和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的键值对。 |
find(key) | 在 map 容器中查找键为 key 的键值对,如果成功找到,则返回指向该键值对的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
lower_bound(key) | 返回一个指向当前 map 容器中第一个大于或等于 key 的键值对的双向迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
upper_bound(key) | 返回一个指向当前 map 容器中第一个大于 key 的键值对的迭代器。如果 map 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
equal_range(key) | 该方法返回一个 pair 对象(包含 2 个双向迭代器),其中 pair.first 和 lower_bound() 方法的返回值等价,pair.second 和 upper_bound() 方法的返回值等价。也就是说,该方法将返回一个范围,该范围中包含的键为 key 的键值对(map 容器键值对唯一,因此该范围最多包含一个键值对)。 |
下面程序以 begin()/end() 组合为例,演示了如何遍历 map 容器:注意,图中 Ei 表示的是 pair 类对象,即键值对。对于 map 容器来说,每个键值对的键的值都必须保证是唯一的。
#include <iostream> #include <map> // pair #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 std::map<std::string, std::string>myMap{ {"STL教程","http://c.biancheng.net/stl/"},{"C语言教程","http://c.biancheng.net/c/"} }; //调用 begin()/end() 组合,遍历 map 容器 for (auto iter = myMap.begin(); iter != myMap.end(); ++iter) { cout << iter->first << " " << iter->second << endl; } return 0; }程序执行结果为:
C语言教程 http://c.biancheng.net/c/
STL教程 http://c.biancheng.net/stl/
读者可自行尝试使用其他组合(如 cbegin()/cend()、 rbegin()/rend() 等)遍历 map 容器。
#include <iostream> #include <map> // pair #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 std::map<std::string, std::string>myMap{ {"STL教程","http://c.biancheng.net/stl/"}, {"C语言教程","http://c.biancheng.net/c/"}, {"Java教程","http://c.biancheng.net/java/"} }; //查找键为 "Java教程" 的键值对 auto iter = myMap.find("Java教程"); //从 iter 开始,遍历 map 容器 for (; iter != myMap.end(); ++iter) { cout << iter->first << " " << iter->second << endl; } return 0; }程序执行结果为:
Java教程 http://c.biancheng.net/java/
STL教程 http://c.biancheng.net/stl/
<"C语言教程","http://c.biancheng.net/c/">
<"Java教程","http://c.biancheng.net/java/">
<"STL教程","http://c.biancheng.net/stl/">
#include <iostream> #include <map> // pair #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 std::map<std::string, std::string>myMap{ {"STL教程","http://c.biancheng.net/stl/"}, {"C语言教程","http://c.biancheng.net/c/"}, {"Java教程","http://c.biancheng.net/java/"} }; //找到第一个键的值不小于 "Java教程" 的键值对 auto iter = myMap.lower_bound("Java教程"); cout << "lower:" << iter->first << " " << iter->second << endl; //找到第一个键的值大于 "Java教程" 的键值对 iter = myMap.upper_bound("Java教程"); cout <<"upper:" << iter->first << " " << iter->second << endl; return 0; }程序执行结果为:
lower:Java教程 http://c.biancheng.net/java/
upper:STL教程 http://c.biancheng.net/stl/
lower_bound(key) 和 upper_bound(key) 更多用于 multimap 容器,在 map 容器中很少用到。
#include <iostream> #include <utility> //pair #include <map> // map #include <string> // string using namespace std; int main() { //创建并初始化 map 容器 std::map<string, string>myMap{ {"STL教程","http://c.biancheng.net/stl/"}, {"C语言教程","http://c.biancheng.net/c/"}, {"Java教程","http://c.biancheng.net/java/"} }; //创建一个 pair 对象,来接收 equal_range() 的返回值 pair <std::map<string, string>::iterator, std::map<string, string>::iterator> myPair = myMap.equal_range("C语言教程"); //通过遍历,输出 myPair 指定范围内的键值对 for (auto iter = myPair.first; iter != myPair.second; ++iter) { cout << iter->first << " " << iter->second << endl; } return 0; }程序执行结果为:
C语言教程 http://c.biancheng.net/c/
和 lower_bound(key)、upper_bound(key) 一样,该方法也更常用于 multimap 容器,因为 map 容器中各键值对的键的值都是唯一的,因此通过 map 容器调用此方法,其返回的范围内最多也只有 1 个键值对。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有