簡體   English   中英

如果 KEY 是 std::list 或 std::vector 而不是值,則 std::map 的默認行為是什么?

[英]What is the default behavior of a std::map if, rather than the value, the KEY is a std::list or std::vector?

例如,這些情況:

using stringlist = std::list<string>;
    
std::map<stringlist, int> orderedMap;
std::unordered_map<stringlist, int> unorderedMap;

比較orderedMap中的鍵如何工作? 它會按詞匯順序逐一比較鍵中的所有項目(“子鍵”)嗎?

unorderedMap中計算 hash 將如何工作?

默認情況下,有序的map使用std::less來比較鍵,默認情況下只執行lhs < rhs

vectoroperator <的行為在這里描述:https://en.cppreference.com/w/cpp/container/vector/operator_cmp

list在這里: https://en.cppreference.com/w/cpp/container/list/operator_cmp

是的,他們只是做一個字典比較,即他們一個一個地比較他們的元素。

您可以通過將自定義比較作為第三個模板參數提供給map來覆蓋該行為。


unordered_map的默認行為是使用std::hash std::hash沒有針對vectorlist的特化,因此它們不能用作鍵。 代碼不應編譯。 在這里試試: https://godbolt.org/z/kgKmKS

您需要通過提供自定義哈希作為unordered_map的第三個模板參數來覆蓋該行為。 可以使用Boost.Hash,它支持標准容器: https://www.boost.org/doc/libs/1_73_0/doc/html/hash/reference.ZFC35FDC70D5FC69D2698EZ83A82

暫無
暫無

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

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