std :: unordered_map和重复键

时间:2011-11-14 17:35:39

标签: c++ stl c++11 unordered-map

我正在使用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 个答案:

答案 0 :(得分:28)

unordered_map维护键值与值的1:1映射,因此count将始终返回零或一。

如果要将多个值映射到单个键,则需要unordered_multimap

答案 1 :(得分:11)

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