我想将给定类的对象映射到另一个类的对象。但是,我想用作键的类不是我编写的,它是一个简单的 struct
具有一些值。 std::map 对它的内容进行排序,我想知道它是如何做到的,以及是否可以将任意类用作键,或者是否需要定义一组要求(运算符等等)。
如果是这样,我可以为实现运算符映射使用的类创建一个包装器。我只需要知道我首先需要实现什么,并且没有任何 I 类的引用 found online指定它们。
最佳答案
key 的所有要求是它是可复制和可分配的。
map 中的顺序由第三个参数定义
模板(以及构造函数的参数,如果使用的话)。这个
默认为std::less<KeyType>
, 默认为 <
运算符(operator),
但不需要使用默认值。随便写个对比
运算符(最好作为函数对象):
struct CmpMyType
{
bool operator()( MyType const& lhs, MyType const& rhs ) const
{
// ...
}
};
注意它必须定义一个严格的顺序,即如果 CmpMyType()( a, b
)
返回真,然后 CmpMyType()( b, a )
必须返回 false,如果
两者都返回 false,元素被认为是相等的(
相同的等价类)。
关于c++ - std::map 键类必须满足哪些要求才能成为有效键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573225/