2012-09-05 53 views
0

這可能很簡單,但我找不到一個簡單的例子。 我明白,使用hash_multimap可以將多個值映射到單個鍵。但是,我將如何訪問這些值。我偶然發現的所有例子都只是訪問映射到鍵的第一個值。繼承人我的意思C++ hash_multimap如何獲得值

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

一個例子我將如何訪問obj2b和obj2c,不僅僅是obj2a

回答

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 
    } 
} 

要迭代剛纔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" 
} 
0

只要抓住一個迭代器的第一個和增加它。如果鍵仍然相等,則您有另一個具有相同鍵值的條目。您也可以使用equal_range

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;