Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:STL multimap.equal_range()_C++_Stl_Multimap - Fatal编程技术网

C++ C++;:STL multimap.equal_range()

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>

我有这段代码,我无法理解equal_range方法返回迭代器的部分。 我知道range是一对对象,里面有两个multimap对象,但我不明白的是,(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;
}
//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