使用使用者定義的型別建立 stdmap 作為鍵
為了能夠使用類作為對映中的鍵,金鑰所需的全部內容是 copiable
和 assignable
。對映中的排序由模板的第三個引數(以及建構函式的引數,如果使用)定義。該預設到 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
如何定義等效/更少完全取決於物件的型別。