1

我有一张地图如下:

std::map<A, long> myMap

这张地图的排序很重要,所以我试图弄清楚地图的排序方式。我发现在这个类的文档中它说在内部,地图中的元素按照构造时设置的特定严格的弱排序标准从低到高的键值排序,但我不明白这是什么意思。它会调用两个对象上的“<”运算符来确定顺序吗?

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

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

3 回答 3

0

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

std::map<A, long, classcomp> myMap如果您需要另一种排序方式,您可以这样做

于 2012-12-14T16:15:01.667 回答
0

它会调用两个对象上的“<”运算符来确定顺序吗?

是的,它会的:

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

确保您定义的“小于”关系operator<是可传递的,即 ifA < BB < C, then也A必须小于C

于 2012-12-14T16:16:11.867 回答
0

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

于 2012-12-14T16:20:38.160 回答