std :: unordered_map и дубликаты ключей - PullRequest
8 голосов
/ 14 ноября 2011

Я использую stl unordered_map и не могу заставить метод count работать.Это моя программа:

typedef unordered_map<char, int> Mymap;
int main() 
{
    Mymap m;  

    m.insert(Mymap::value_type('a', 1)); 
    m.insert(Mymap::value_type('b', 2)); 
    m.insert(Mymap::value_type('c', 3)); 
    m.insert(Mymap::value_type('b', 4)); 
    m.insert(Mymap::value_type('b', 5)); 

    cout << m.count('b') << endl;

    return 0; 
} 

В документации для unordered_map сказано, что unordered_map::count(const Key& k) возвращает количество элементов с ключом k.Таким образом, я ожидаю, что результат здесь будет 3, тогда как реальный результат будет 1.Почему?

Ответы [ 2 ]

28 голосов
/ 14 ноября 2011

unordered_map поддерживает соотношение ключ-значение 1: 1, поэтому count всегда будет возвращать ноль или единицу.

Вам нужен unordered_multimap, если вы хотите отобразить несколько значений на один ключ.

12 голосов
/ 14 ноября 2011
// g++ -std=c++0x init-unorderedmap.cc && ./a.out
#include <iostream>
#include <unordered_map>

namespace {
  typedef std::unordered_map<char, int> Mymap;
}

int main() {
  using namespace std;

  Mymap m{ {'a', 1}, {'b', 2}, {'c', 3}, {'b', 4}, {'b', 5}};
  cout << m.count('b') << endl;

  unordered_multimap<char, int> mm{ {'b', 4}, {'b', 5}};
  cout << mm.count('b') << endl;
}

Выход

1
2
...