这可能很简单,但我找不到一个简单的例子。 据我所知,使用hash_multimap,您可以将多个值映射到单个键。但我究竟会如何访问这些值。我偶然发现的所有示例总是只访问映射到密钥的第一个值。这是我的意思的一个例子
key : value
1 : obj1a;
2 : obj2a, obj2b, obj2c
我如何访问obj2b和obj2c,而不仅仅是obj2a
答案 0 :(得分: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
}
}
要迭代一个键值,请改用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"
}
答案 1 :(得分:2)
例如,equal_range
将两个迭代器返回到匹配范围的开头和结尾:
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;
答案 2 :(得分:0)
只需抓住第一个迭代器并递增它。如果键仍然相等,则您有另一个具有相同键值的条目。您也可以使用equal_range。