使用使用者定義的型別建立 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

如何定義等效/更少完全取決於物件的型別。