c++ - std::map 键类必须满足哪些要求才能成为有效键?

标签 c++ stl map key

我想将给定类的对象映射到另一个类的对象。但是,我想用作键的类不是我编写的,它是一个简单的 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/

相关文章:

c++ - 当我们迭代它时更改 HashMap 的行为是否已定义?

c++ - static const的C++容器初始化列表导致栈溢出

c++ - 如何确定是否可以从给定的初始化列表构造结构?

c++ - 您如何确定由 'std::map' 创建的用于 'boost::pool_allocator' 的节点的大小(以跨平台方式)?

c++ - dllexport/dllimport 是否忽略成员模板函数?

map - 如何更改 openlayers 标记图标?

Java:存储无限游戏世界的坐标图的好数据结构是什么?

c++ - 程序不工作,添加它工作的打印语句,为什么?

c++ - 从两个线程调用 std::deque 上的删除和push_back是否是线程安全的?

c++ - STL-Like 范围,如果我这样做会出什么问题?