gpt4 book ai didi

c++ - 键不存在时 unordered_multimap::bucket() 的返回值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:04 24 4
gpt4 key购买 nike

当key不存在时,unordered_multimap::bucket(key)是什么应该回来吗?

引用资料说它应该返回包含键的桶的桶号,但没有说明当 unordered_multimap 中不存在该键时会发生什么。

I tried it myself但我得到的结果不正确:

std::unordered_multimap<std::string, std::string> m = {{"jack", "foo"}, {"jill", "bar"}};
std::cout << "jack is in bucket " << m.bucket("jack") << std::endl;
std::cout << "jill is in bucket " << m.bucket("jill") << std::endl;
std::cout << "bjarne is in bucket " << m.bucket("bjarne") << std::endl;

输出是:

jack is in bucket 3
jill is in bucket 4
bjarne is in bucket 4

这是否意味着我必须使用 unordered_multimap::count(key) == 0 来捕获不存在的键?

最佳答案

它返回键所属的桶的索引,无论是否插入了这样的键。

来自标准(C++11,§23.2.5,表 103,第 752 页):

b.bucket(k)

Returns the index of the bucket in which elements with keys equivalent to k would be found if any such element existed.

唯一的先决条件是 b.bucket_count > 0(几乎总是如此)。理论上,unordered_multimap 的默认构造函数被允许生成具有零桶的初始散列,但我怀疑任何实现实际上都这样做了)。


要检查 key 是否存在(即已插入),可以使用

b.count(key) > 0

按照你的建议,或者

b.find(key) != b.end()

(我假设后者往往更有效,因为一般来说,检查是否存在比计数更省力。这在 unordered_multimap 中尤其如此。)

关于c++ - 键不存在时 unordered_multimap::bucket() 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com