我一直在尝试为 std::map 容器定义一个自定义比较器。
问题是:我可以中继 == 和 != 运算符还是会破坏严格的弱顺序?我是否被迫使用 operator < ?
(一和二类确实正确定义了 operator!= 和 operator==)
typedef std::pair<One, Two> MapKey_t;
class cmp
{
bool operator()(const MapKey_t& left, const MapKey_t& right) const
{ return left.first != right.first && right.first == right.second; }
}
typedef std::map<MapKey_t, Three*, cmp> MyMap_t;
由于左右切换不会改变比较器的返回值,这会起作用吗?
我并不真正关心如何将项目分类到容器中,但我不希望重复项成为其中的一部分。
更新:
我可以使用内存地址来获得严格的弱排序吗?
class cmp
{
bool operator()(const MapKey_t& left, const MapKey_t& right) const
{
if(left.first == right.first)
if(left.second != right.second)
return false; // This represents for me, functionally, a duplicate
else
// Can't use operator < there since left.second equals right.second but
// functionally for me, this is not a duplicate and should be stored
// what about memory address strict weak ordering ?
return &left < &right;
else
return left.first < right.first; // There I can use operator <
}