這可能很簡單,但我找不到一個簡單的例子。 我明白,使用hash_multimap可以將多個值映射到單個鍵。但是,我將如何訪問這些值。我偶然發現的所有例子都只是訪問映射到鍵的第一個值。繼承人我的意思C++ hash_multimap如何獲得值
key : value
1 : obj1a;
2 : obj2a, obj2b, obj2c
一個例子我將如何訪問obj2b和obj2c,不僅僅是obj2a
這可能很簡單,但我找不到一個簡單的例子。 我明白,使用hash_multimap可以將多個值映射到單個鍵。但是,我將如何訪問這些值。我偶然發現的所有例子都只是訪問映射到鍵的第一個值。繼承人我的意思C++ hash_multimap如何獲得值
key : value
1 : obj1a;
2 : obj2a, obj2b, obj2c
一個例子我將如何訪問obj2b和obj2c,不僅僅是obj2a
通常的多重映射迭代循環,其中是這樣的:
#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
}
}
要迭代剛纔e鍵值,請改爲使用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"
}
只要抓住一個迭代器的第一個和增加它。如果鍵仍然相等,則您有另一個具有相同鍵值的條目。您也可以使用equal_range。
例如,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;