与排序的对象比较。 C ++

时间:2013-01-04 00:54:15

标签: c++

我很难在这里了解其他人的代码。 如果有人帮助我,我真的很感激。

假设有一个对象数组:vpair_list,此vpair_list的类型为vpair。所以,它会是这样的:

class vpair
{
public:
    int vid;
    int vlabel;
};

bool operator < (const vpair& x, const vpair& y);

vpair* vpair_list;
vpair_list = new vpair[25];
..
sort(vpair_list, vpair_list+j);

我所知道的是sort()比较数组vpair_list的每个元素并对它们进行排序。

问题是我无法理解排序是如何工作的,因为对象vpair有两个不同的属性。

排序是否像比较每个属性(vidvlabel)或....我认为排序应该通过比较特定字段或属性(此处为vidvlabel)来完成。

但这段代码与此无关,似乎只是比较整个对象。有人能告诉我这是如何运作的吗?

提前谢谢。

3 个答案:

答案 0 :(得分:2)

标准方法:

class vpair
{
public:
    int vid;
    int vlabel;
};

bool operator < (vpair const& x, vpair const& y)
{
     return std::tie(x.vid, x.vlabel) < std::tie(y.vid, y.vlabel);
}

当然,运营商可以是会员:

class vpair
{
    int vid;
    int vlabel;
public:
    bool operator < (vpair const& y) const
    {
         return std::tie(vid, vlabel) < std::tie(y.vid, y.vlabel);
    }

};

答案 1 :(得分:1)

默认情况下,

排序与operator<进行比较。您可以为您的类实现此运算符,如下所示:

public:
bool operator < (const vpair& other) const
{
     return (vid < other.vid); // Uses vid but this can be vlable or something else.
}

如果你所使用的类没有operator<的重载,你总是可以将比较函数作为std::sort的第三个参数传递:

bool compare_func(vpair i,vpair j) { return (i.vid < j.vid); }
sort(vpair_list, vpair_list+j, compare_func);

答案 2 :(得分:0)

  

排序是否像比较每个属性(vid和vlabel)或....

它会发生你想要的

默认情况下,人们提到过,<运算符被各种排序算法用于按该运算符的升序排列元素。但是对于类/结构,没有默认方式来比较它们意味着你是程序员必须对其进行编码。

这就是

bool operator < (const vpair& x, const vpair& y);

是。它只是对程序员提供的用于比较2 vpair顺序的函数定义的声明。程序员使用他的规则来决定并最终返回truefalse。这用于排序。

所以你可以决定你想要它的排序方式。

bool operator < (const vpair& x, const vpair& y)
{
     if(x.vid != y.vid)
        return x.vid<y.vid;

     return x.vlabel <y.vlabel;
}

这将按ID的升序排序,如果它们相等,则按vlabel的升序排序。