std::unordered_map 和重复键

发布于 2024-12-15 05:06:57 字数 600 浏览 2 评论 0原文

我正在使用 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。为什么?

I'm using an stl unordered_map, and I can't seem to get the count method to work.
This is my program:

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

The documentation for unordered_map says that unordered_map::count(const Key& k) returns the number of elements with the key k.
So I would expect the output here to be 3, whereas the real output is 1. Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初吻给了烟 2024-12-22 05:06:57

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

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

An unordered_map maintains a 1:1 mapping of key to value, so count will always return zero or one.

You need an unordered_multimap if you want to map multiple values to a single key.

内心旳酸楚 2024-12-22 05:06:57
// 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
// 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;
}

Output

1
2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文