首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果键不是值,而是std::list或std::vector,那么std::map的默认行为是什么?

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

Stack Overflow用户
提问于 2020-07-01 09:59:24
回答 1查看 75关注 0票数 2

例如,这些案件:

代码语言:javascript
运行
复制
using stringlist = std::list<string>;
    
std::map<stringlist, int> orderedMap;
std::unordered_map<stringlist, int> unorderedMap;

如何比较orderedMap中的键?它会按词法顺序逐一比较键中的所有项目(“子键”)吗?

如何在unorderedMap中计算哈希?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 10:15:31

在默认情况下,有序的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提供一个自定义hasher作为第三个模板参数来覆盖该行为。您可以使用Boost.Hash,它支持标准容器:https://www.boost.org/doc/libs/1_73_0/doc/html/hash/reference.html

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62674307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档