地图的默认排序

时间:2012-12-14 16:13:23

标签: c++ map

我的地图如下:

std::map<A, long> myMap

这张地图的排序很重要,所以我想弄清楚如何订购地图。我发现在这个类的文档中它说在内部,地图中的元素按照在构造上设置的特定严格弱排序标准从低到高的键值排序但是我不明白这意味着什么。它会称之为'&lt;'操作员对这两个对象进行排序?

我也知道我可以在初始化时将映射传递给结构如下,它会按照我的意愿执行。我只是好奇它默认做了什么。

struct classcomp {
  bool operator() (const A& lhs, const A& rhs) const
   {return lhs<rhs;}
};

3 个答案:

答案 0 :(得分:0)

默认情况下,它会调用less<A> operator <(至少如果不是专门的话)

如果您需要其他方式进行排序,可以std::map<A, long, classcomp> myMap

答案 1 :(得分:0)

  

它会调用'&lt;'操作员对这两个对象进行排序?

是的,它会:

struct A {
    bool operator<(const A& other) const
    {
        return ...; // return true if *this is less than other; false otherwise
    }
};

确保operator<定义的“小于”关系具有传递性,即如果A < BB < C,则A必须小于{{1}同样。

答案 2 :(得分:0)

默认情况下,std::map会使用std::less来比较两个键。默认情况下,std::less看起来非常像您的classcomp,并使用<进行比较。您可以通过传递不同的比较函数或对象,或通过为您的类型创建operator<来覆盖默认行为。