gpt4 book ai didi

c++ - 您可以使用自定义比较器将 std::map 转换为无序映射吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:55 31 4
gpt4 key购买 nike

由于使用了一个我不想编辑其代码的库,我发现自己需要使用 std::map<Identifier, String> .

struct compareIdentifiers
{
bool operator()(const Identifier& a, const Identifier& b) const
{
// return a < b;
return true;
}
};

typedef std::map<Identifier, String, compareIdentifiers> IdentifierMap;

我应该返回 true 还是 false?无需进行比较。我想返回 true 或返回 false 在效率上会有很大不同,因为一个会导致 map 重新排序,另一个不会......对吧?

我尝试使用 std::unordered_map<Identifier, String>但出现错误:

错误 C2280“std::hash<_Kty>::hash(void)”:试图引用已删除的函数

最佳答案

总是返回true是无效的。这意味着(例如)A < BB < A两者都是真实的。这与 std::map 的要求相矛盾比较器,它强加了一个 strict weak ordering .返回 true 完全有可能使您的程序崩溃。

始终返回 false 是有效的,这实际上意味着所有键都被认为是相等的。因此只能将一个键添加到 map 中(感谢 aschepler 的更正)。

是什么阻止了您编写一个合理的比较器?

关于c++ - 您可以使用自定义比较器将 std::map 转换为无序映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56250047/

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