例如,这些情况:
using stringlist = std::list<string>;
std::map<stringlist, int> orderedMap;
std::unordered_map<stringlist, int> unorderedMap;
Run Code Online (Sandbox Code Playgroud)
比较关键在orderedMap工作中如何?它会按词法顺序一一比较键中的所有项目(“子键”)吗?
计算哈希将如何unorderedMap工作?
Seb*_*edl 11
map默认情况下,orderedstd::less用于比较键,默认情况下只是这样做lhs < rhs。
vector's的行为在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没有针对vectorand 的特化list,因此它们不能用作键。代码不应该编译。在这里试试:https : //godbolt.org/z/kgKmKS
您需要通过提供自定义散列器作为第三个模板参数来覆盖该行为unordered_map。您可以使用支持标准容器的 Boost.Hash:https ://www.boost.org/doc/libs/1_73_0/doc/html/hash/reference.html