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

C++ 对象比较与排序。C++;,c++,C++,我很难理解这里其他人的密码。 如果有人帮助我,我会非常感激 假设有一个对象数组:vpair\u list,这个vpair\u 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];

我很难理解这里其他人的密码。 如果有人帮助我,我会非常感激

假设有一个对象数组:
vpair\u list
,这个
vpair\u 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);
vpair类
{
公众:
int vid;
国际弗拉贝尔;
};
bool操作员<(常数vpair&x、常数vpair&y);
vpair*vpair_列表;
vpair_列表=新vpair[25];
..
排序(vpair\U列表、vpair\U列表+j);
我从中知道的是
sort()
比较数组
vpair\u list
的每个元素并对它们进行排序

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

排序工作是否像比较每个属性(
vid
vlabel
)或。。。。?我认为排序应该通过比较特定字段或属性来完成(这里是
vid
vlabel

但这段代码与此无关,似乎只是比较了整个对象。有人能告诉我这是怎么回事吗

提前感谢。

标准方法:

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);
}
vpair类
{
公众:
int vid;
国际弗拉贝尔;
};
bool操作员<(vpair const&x、vpair const&y)
{
返回std::tie(x.vid,x.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);
    }

};
vpair类
{
int vid;
国际弗拉贝尔;
公众:
bool操作员<(vpair const&y)const
{
返回std::tie(vid,vlabel)
默认情况下,排序与
运算符进行比较
排序工作是否像比较每个属性(vid和vlabel)或

它的发生方式正是你所希望的


正如人们提到的,默认情况下,
排序是通过调用操作符来完成的。您已经声明了它,但还没有定义它。它使用了
运算符,非常感谢你们。但我的意思是“operator@user1643168”会比较哪个字段,不管您如何实现它。由你决定。如果我不决定与哪个字段进行比较呢?有“默认模式”吗?谢谢你,谢了。那么它同时比较了vid和vlabel?如果一个较大,另一个较小,该如何排序?第一个元组元素优先。要颠倒优先级,请使用
std::tie(vlabel,vid)
使用
std::tie
将按字典顺序对它们进行比较,也就是说,它将比较第一个元素(在本例中为
vid
),如果它们相等,它将比较第二个元素(在本例中为
vlabel
)。感谢您的回答。干杯~@user1643168很高兴我能帮忙!
public:
bool operator < (const vpair& other) const
{
     return (vid < other.vid); // Uses vid but this can be vlable or something else.
}
bool compare_func(vpair i,vpair j) { return (i.vid < j.vid); }
sort(vpair_list, vpair_list+j, compare_func);
bool operator < (const vpair& x, const vpair& y);
bool operator < (const vpair& x, const vpair& y)
{
     if(x.vid != y.vid)
        return x.vid<y.vid;

     return x.vlabel <y.vlabel;
}