如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?



例如,这些情况:

using stringlist = std::list<string>;

std::map<stringlist, int> orderedMap;
std::unordered_map<stringlist, int> unorderedMap;

比较orderedMap中的键将如何工作?它会按词法顺序逐个比较键中的所有项目("子键"(吗?

unorderedMap中计算哈希将如何工作?

默认情况下,有序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::hashstd::hash没有vectorlist的特化,所以它们不能用作密钥。代码不应编译。在这里试试: https://godbolt.org/z/kgKmKS

您需要通过提供自定义哈希器作为unordered_map的第三个模板参数来覆盖该行为。您可以使用支持标准容器的 Boost.Hash:https://www.boost.org/doc/libs/1_73_0/doc/html/hash/reference.html

最新更新