C++ C++;:STL multimap.equal_range()
我有这段代码,我无法理解equal_range方法返回迭代器的部分。 我知道range是一对对象,里面有两个multimap对象,但我不明白的是,(it=range.first;it!=range.second;++it)-这到底是什么意思C++ C++;:STL multimap.equal_range(),c++,stl,multimap,C++,Stl,Multimap,我有这段代码,我无法理解equal_range方法返回迭代器的部分。 我知道range是一对对象,里面有两个multimap对象,但我不明白的是,(it=range.first;it!=range.second;++it)-这到底是什么意思 // multmap.cpp -- use a multimap #include <iostream> #include <string> #include <map> #include <algorithm>
// 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;
}
//multmap.cpp--使用多重映射
#包括
#包括
#包括
#包括
typedef int-keype;
typedef std::对;
typedef std::多映射映射代码;
int main()
{
使用名称空间std;
地图编码;
代码。插入(第415对,“旧金山”);
代码。插入(第510对,“奥克兰”);
代码。插入(成对(718,“布鲁克林”);
代码。插入(成对(718,“斯塔顿岛”);
代码.插入(第415对,“圣拉斐尔”);
代码。插入(成对(510,“伯克利”);
cout两个迭代器中的迭代器定义项的范围,这些项的键等于您搜索的内容,方式为[range.first,range.second)
这意味着要在该范围内进行迭代,您需要从范围开始。首先
并推进迭代器,直到它到达范围。其次
,这意味着您刚刚脱离了相等的范围。从概念上讲,这与在范围内进行迭代时发生的情况相同[container.begin(),container.end())
equal_range
返回一对迭代器i1、i2
,使范围内的所有元素[i1,i2)
具有相同的密钥。因此,为了使用代码718遍历所有城市,您调用equal\u range
,然后从返回对的第一个
迭代到返回对的第二个
equal\u range
的结果,即您的range
对象是一对两个迭代器[范围的开始,范围的结束)
。因此,您希望迭代[范围.第一,范围.第二)
:
我认为你的答案对我来说是最容易理解的,因为看到对对象成员进行迭代会让人感到困惑。但是如果它与
[container.begin(),container.end())
相同,那就没关系了。谢谢你
auto range = m.equal_range(4);
+---+---+---+---+---+---+---+---+---+
| 2 | 3 | 3 | 4 | 4 | 4 | 4 | 5 | 6 | =: m
+---+---+---+---+---+---+---+---+---+
^ ^
| |
range.first range.second