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

Ela*_*ler 1 c++ containers stl

由于使用了我不想编辑其代码的库,因此我发现自己需要使用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;
Run Code Online (Sandbox Code Playgroud)

我应该返回true还是false?无需进行比较。我想返回true或false会在效率上产生巨大的差异,因为一个会导致地图重新排序,而另一个不会...对吗?

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

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

joh*_*ohn 7

始终返回true无效。这将意味着(例如)A < B并且B < A两者都是正确的。这与std::map比较器的要求矛盾,后者要求严格的弱排序。返回true完全有可能使您的程序崩溃。

始终返回false是有效的,这实际上意味着所有键都被视为相等。因此只能向地图添加一个关键点(感谢aschepler进行更正)。

是什么阻止您编写明智的比较器?