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; });