gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:33:26 28 4
gpt4 key购买 nike

例如,这些情况:

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

关于c++ - 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62674307/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com