[英]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.