使用用户定义的类型创建 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
如何定义等效/更少完全取决于对象的类型。