[英]C++: STL multimap.equal_range()
我有这个代码,我无法理解equal_range方法返回迭代器的部分。 我知道范围是配对对象里面有两个多图对象,但是我得不到的,就是为什么有'for (it = range.first; it != range.second; ++it)'
- 这是什么意思到底?
// multmap.cpp -- use a multimap
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
typedef int KeyType;
typedef std::pair<const KeyType, std::string> Pair;
typedef std::multimap<KeyType, std::string> MapCode;
int main()
{
using namespace std;
MapCode codes;
codes.insert(Pair(415, "San Francisco"));
codes.insert(Pair(510, "Oakland"));
codes.insert(Pair(718, "Brooklyn"));
codes.insert(Pair(718, "Staten Island"));
codes.insert(Pair(415, "San Rafael"));
codes.insert(Pair(510, "Berkeley"));
cout << "Number of cities with area code 415: "
<< codes.count(415) << endl;
cout << "Number of cities with area code 718: "
<< codes.count(718) << endl;
cout << "Number of cities with area code 510: "
<< codes.count(510) << endl;
cout << "Area Code City\n";
MapCode::iterator it;
for (it = codes.begin(); it != codes.end(); ++it)
cout << " " << (*it).first << " "
<< (*it).second << endl;
pair<MapCode::iterator, MapCode::iterator> range
= codes.equal_range(718);
cout << "Cities with area code 718:\n";
for (it = range.first; it != range.second; ++it) //<------------------ here
cout << (*it).second << endl;
return 0;
}
equal_range
的结果,即你的range
对象,是一对两个迭代器[beginning-of-range, end-of-range)
。 所以你想迭代[range.first, range.second)
:
auto range = m.equal_range(4);
+---+---+---+---+---+---+---+---+---+
| 2 | 3 | 3 | 4 | 4 | 4 | 4 | 5 | 6 | =: m
+---+---+---+---+---+---+---+---+---+
^ ^
| |
range.first range.second
对中的迭代器定义项的范围,其键的大小等于您以[range.first, range.second)
的方式搜索的项。
这意味着要迭代该范围,您从range.first
开始并推进迭代器直到它达到range.second
,这意味着您刚刚离开了相等的范围。 从概念上讲,它与迭代范围[container.begin(), container.end())
时发生的情况相同。
equal_range
返回一对迭代器i1, i2
,使得[i1, i2)
范围内的所有元素具有相同的密钥。 因此,为了使用代码718遍历所有城市,您调用equal_range
,然后从返回的对的first
迭代到返回的对的second
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.