例如,这些情况:
using stringlist = std::list<string>;
std::map<stringlist, int> orderedMap;
std::unordered_map<stringlist, int> unorderedMap;
比较orderedMap
中的键将如何工作?它会按词法顺序逐个比较键中的所有项目("子键"(吗?
在unorderedMap
中计算哈希将如何工作?
默认情况下,有序map
使用std::less
来比较键,默认情况下只lhs < rhs
键。
vector
operator <
的行为描述如下: 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
没有vector
和list
的特化,所以它们不能用作密钥。代码不应编译。在这里试试: https://godbolt.org/z/kgKmKS
您需要通过提供自定义哈希器作为unordered_map
的第三个模板参数来覆盖该行为。您可以使用支持标准容器的 Boost.Hash:https://www.boost.org/doc/libs/1_73_0/doc/html/hash/reference.html