13

私はこのコードを持っていますが、equal_rangeメソッドが反復子を返す部分を理解できません。range は内部に 2 つの multimap オブジェクトを持つペアオブジェクトであることは知っていますが、得られないのは、なぜそこにあるのか '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;
}
4

3 に答える 3

30

の結果equal_range、つまりrangeオブジェクトは、2 つの iteratorのペア[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
于 2012-09-19T13:04:23.127 に答える
12

ペアの反復子は、方法で検索したものと等しいキーを持つアイテムの範囲を定義します[range.first, range.second)

これは、その範囲を反復するには、 から開始しrange.firstて に達するまで反復子を進めることrange.secondを意味します。これは、ちょうど等しい範囲から外れたことを意味します。概念的には、 range を反復処理した場合と同じです[container.begin(), container.end())

于 2012-09-19T13:03:29.087 に答える
4

equal_rangei1, i2範囲内のすべての要素[i1, i2)が同じキーを持つような反復子のペアを返します。したがって、コード 718 ですべての都市を反復するには、 を呼び出してから、返されたペアから返されたペアのまでequal_range反復します。firstsecond

于 2012-09-19T13:03:58.963 に答える