簡體   English   中英

當key不存在時,返回unordered_multimap :: bucket()的值?

[英]Return value of unordered_multimap::bucket() when key does not exist?

當密鑰不存在時,什么是unordered_multimap::bucket(key)應該返回?

該引用說它應該返回包含密鑰的存儲桶的存儲桶編號,但是當unordered_multimap中不存在該密鑰時,沒有任何說明。

我自己嘗試了但是得到的結果不正確:

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

這是否意味着我必須使用say unordered_multimap::count(key) == 0來捕獲不存在的密鑰?

它返回密鑰所屬的桶的索引無論是否插入了這樣的密鑰。

從標准(C ++ 11,§23.2.5,表103,第752頁):

b.bucket(k)

返回存儲桶的索引,如果存在任何此類元素,將在其中找到具有等於k鍵的元素。

唯一的前提條件是b.bucket_count > 0 (幾乎總是如此)。 理論上, unordered_multimap的默認構造函數允許生成零桶的初始哈希,但我懷疑任何實現實際上都是這樣做的。


要檢查密鑰是否存在(即已插入),請使用

b.count(key) > 0

正如你的建議,或

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

(我認為后者往往更有效率,因為通常來說,檢查存在是比計算更少的努力。在unordered_multimap尤其如此。)

讀取標准的表103是桶的返回,“如果存在任何這樣的元素,則將找到具有等於k的鍵的元素的桶的索引”。 因此,如果“bjarne”在多圖中,那么他就會在第4桶中。

它確實看起來像你必須使用

unordered_multimap::count(key) == 0

unordered_multimap::find(k) == unordered_multimap::end()檢查不存在的密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM