使用用户定义的类型创建 stdmap 作为键

为了能够使用类作为映射中的键,密钥所需的全部内容是 copiableassignable。映射中的排序由模板的第三个参数(以及构造函数的参数,如果使用)定义。该默认std::less<KeyType>,其默认为 < 操作,但没有规定使用默认值。只需编写一个比较运算符(最好作为一个功能对象):

struct CmpMyType
{
    bool operator()( MyType const& lhs, MyType const& rhs ) const
    {
        //  ...
    }
};

在 C++中,compare 谓词必须是严格的弱排序 。特别是,compare(X,X) 必须返回 false 才能获得任何知识。即如果 CmpMyType()(a, b) 返回 true,则 CmpMyType()(b, a) 必须返回 false,如果两者都返回 false,则认为元素相等(同一等价类的成员)。

严格的弱排序

这是一个定义两个对象之间关系的数学术语。
它的定义是:

如果 f(x, y)和 f(y, x)都为假,则两个对象 x 和 y 是等价的。请注意,对象始终(通过反射不变性)等同于自身。

就 C++而言,这意味着如果你有两个给定类型的对象,则在与运算符<进行比较时应返回以下值。

X    a;
X    b;

Condition:                  Test:     Result
a is equivalent to b:       a < b     false
a is equivalent to b        b < a     false

a is less than b            a < b     true
a is less than b            b < a     false

b is less than a            a < b     false
b is less than a            b < a     true

如何定义等效/更少完全取决于对象的类型。