由于使用了一个我不想编辑其代码的库,我发现自己需要使用 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 < B
和 B < A
两者都是真实的。这与 std::map
的要求相矛盾比较器,它强加了一个 strict weak ordering .返回 true 完全有可能使您的程序崩溃。
始终返回 false 是有效的,这实际上意味着所有键都被认为是相等的。因此只能将一个键添加到 map 中(感谢 aschepler 的更正)。
是什么阻止了您编写一个合理的比较器?
关于c++ - 您可以使用自定义比较器将 std::map 转换为无序映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56250047/