Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 基于某个成员变量的类对象排序向量_Class_Sorting_Vector - Fatal编程技术网

Class 基于某个成员变量的类对象排序向量

Class 基于某个成员变量的类对象排序向量,class,sorting,vector,Class,Sorting,Vector,让 在某个地方我们定义了记录对象的向量,即 class Record { public: Record(); private: string id; double score; }; 矢量记录(N); //以某种方式初始化记录 我想根据score(按降序)对记录进行排序,跟踪Record的其他成员变量(在本例中,仅记录score,但一般情况下,不管其他什么)。您可以实现比较运算符 vector<Record> reco

在某个地方我们定义了记录对象的向量,即

class Record {

    public:
       Record();

    private:
       string id;
       double score;
};
矢量记录(N);
//以某种方式初始化记录

我想根据
score
(按降序)对记录进行排序,跟踪
Record
的其他成员变量(在本例中,仅记录
score
,但一般情况下,不管其他什么)。

您可以实现比较运算符

vector<Record> records(N);
// Initialize records somehow
对对象向量进行排序 您可以为您的类重载比较运算符>1,它看起来像:

std::sort(records.begin(), records.end(), 
  [] (const Record& lhs, const Record& rhs) -> bool { return lhs > rhs; });
或作为成员函数:

bool operator> (const Record& r1, const Record& r2) {
    return r1.score > r2.score;
} 
将作为第三个参数隐式替换为:

bool Record::operator> (const Record& r) {
     return score > r.score;
} 
您也可以在
排序中直接使用lambda函数

std::sort(records.begin(), records.end(), overloaded_comparison_operator)


一,。你们可以使用任何你们认为对你们的情况有用的方法。请记住,
运算符
将按降序排序

谢谢你的回答,@Jason!那么,我如何应用这些操作符中的一个,以便按降序对
记录进行排序呢?我想我应该调用
std::sort
,就像
std::sort(records.begin(),records.end(),XXX)
一样。XXX应该是什么?再次感谢@nullgeppetto您只需要
std::sort(records.begin(),records.end())
,因为
Record
是可比较的。很好,但是如果我只需要按降序排序,我需要实现所有比较运算符吗?哎呀,您需要添加一个lambda来降序排序(例如
[](const Record&lhs,const Record&rhs)->bool){返回lhs>rhs;}
)。
std::sort(records.begin(), records.end(), overloaded_comparison_operator)
std::sort(records.begin(), records.end(), [](const Record & r1,const Record & r2) -> bool {
                                          return r1.score > r2.score; });