0

これはおそらく非常に単純ですが、単純な例が見つかりません。hash_multimap を使用すると、単一のキーに複数の値をマップできることを理解しています。しかし、これらの値に正確にアクセスするにはどうすればよいでしょうか。私が遭遇したすべての例は、常にキーにマップされた最初の値にアクセスするだけです。ここに私が意味するものの例があります

key : value
1 : obj1a;
2 : obj2a, obj2b, obj2c

obj2a だけでなく、obj2b と obj2c にアクセスする方法

4

3 に答える 3

3

通常のマルチマップ反復ループは次のようになります。

#include <unordered_multimap>

typedef std::unordered_multimap<K, V> mmap_t;

mmap_t m;

for (mmap_t::const_iterator it1 = m.begin(), it2 = it1, end = m.end(); it1 != end; it1 = it2)
{
    // outer loop over unique keys

    for ( ; it1->first == it2->first; ++it2)
    {
        // inner loop, all keys equal to it1->first
    }
}

1つのキー値のみを反復処理するには、equal_range代わりにを使用します。

std::pair<mmap_t::const_iterator, mmap_t::const_iterator> p = m.equal_range(key);

for (mmap_t::const_iterator it = p.first; it != p.second; ++it)
{
    // use "it->second"
}
于 2012-09-05T05:05:29.770 に答える
2

たとえばequal_range、一致する範囲の最初と最後に2つのイテレータを返します。

void lookup(const map_type& Map, int key)
{
  cout << key << ": ";
  pair<map_type::const_iterator, map_type::const_iterator> p =
    Map.equal_range(key);

  for (map_type::const_iterator i = p.first; i != p.second; ++i)
    cout << (*i).second << " ";

  cout << endl;
}

map_typeのようなものを使用しているところ

class ObjectT; // This is the type of object you want to store
typedef hash_multimap<int, ObjectT> map_type;
于 2012-09-05T05:05:29.277 に答える
0

最初のイテレータを取得してインクリメントするだけです。キーがまだ等しい場合は、同じキー値を持つ別のエントリがあります。equal_rangeも使用できます。

于 2012-09-05T05:03:42.707 に答える