例如,这些案件:
using stringlist = std::list<string>;
std::map<stringlist, int> orderedMap;
std::unordered_map<stringlist, int> unorderedMap;如何比较orderedMap中的键?它会按词法顺序逐一比较键中的所有项目(“子键”)吗?
如何在unorderedMap中计算哈希?
发布于 2020-07-01 10:15:31
在默认情况下,有序的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提供一个自定义hasher作为第三个模板参数来覆盖该行为。您可以使用Boost.Hash,它支持标准容器:https://www.boost.org/doc/libs/1_73_0/doc/html/hash/reference.html
https://stackoverflow.com/questions/62674307
复制相似问题