2013-07-15 3 views
2

Я хотел бы посмотреть, можно ли увидеть все значения, которые мы установили. Например:Unordered multimap, находящее все значения

#include <iostream> 
#include <unordered_map> 

using namespace std; 


int main() { 
    unordered_multimap<string,int> hash; 

    hash.emplace("Hello", 12); 
    hash.emplace("World", 22); 
    hash.emplace("Wofh", 25); 
    for (int i = 1; i < 10; i++) { 
     hash.emplace("Wofh", i); 
    } 
    cout << "Hello " << hash.find("Hello")->second << endl; 
    cout << "Wofh " << hash.count("Wofh") << endl; 
    cout << "Wofh " << hash.find("Wofh")->second << endl; 

    return 0; 
} 

Выход:

$ ./stlhash 
Hello 12 
Wofh 10 
Wofh 9 

В то время как я хочу, чтобы последняя строка, чтобы показать от 25,1,2 ... до 9. По-видимому find только принимает first и second указатель как сначала значение, а второе - соответствующее значение. Есть какой-либо способ сделать это?

+0

возможно дубликат [C++ неупорядоченного \ _multimap] (http://stackoverflow.com/questions/9046922/ с-неупорядоченный-MultiMap) – nimcap

ответ

2

Операцию вам нужно, это называется equal_range

Пример из cplusplus.com:

// unordered_multimap::equal_range 
#include <iostream> 
#include <string> 
#include <unordered_map> 
#include <algorithm> 

typedef std::unordered_multimap<std::string,std::string> stringmap; 

int main() 
{ 
    stringmap myumm = { 
    {"orange","FL"}, 
    {"strawberry","LA"}, 
    {"strawberry","OK"}, 
    {"pumpkin","NH"} 
    }; 

    std::cout << "Entries with strawberry:"; 
    auto range = myumm.equal_range("strawberry"); 
    for_each (
    range.first, 
    range.second, 
    [](stringmap::value_type& x){std::cout << " " << x.second;} 
); 

    return 0; 
} 
Смежные вопросы