【发布时间】:2015-06-12 06:54:44
【问题描述】:
如何使用 std::sort 对自定义类中的两个向量进行排序?
例如,假设我有一个包含两个向量、id 和标记的类。初始化向量后,我想按标记对此类的元素进行排序,保留 id 中的排序顺序。
我尝试使用自定义std::sort 函数来执行此操作。
class Example
{
public:
void init();
static bool sortByMarks(const Example &lhs, const Example &rhs);
//....other functions
private:
vector<int> ids;
vector<int> marks;
//....other variables
}
void Partition::init()
{
ids.resize(5);
marks.resize(5);
for(int i=0;i<5;i++)
ids[i]=i+1;
marks[0]=47;marks[1]=44;marks[2]=88;marks[3]=52;marks[4]=46;
}
bool Partition::sortByMarks(const Example &lhs, const Example &rhs);
{
return lhs.marks < rhs.marks;
}
编辑:[通过将 Example:: 添加到函数调用来解决此问题] 我在调用此函数时遇到问题。我尝试了以下方法:
Example e;
sort(&e, &e, Example::sortByMarks);
示例输入:
ids : 1,2,3,4,5
marks: 47,44,88,52,46
样本输出:
ids : 2,5,1,4,3
marks: 44,46,47,52,88
感谢任何帮助!
编辑:标记向量是我想要排序的(ids 也应该相应地更改)
【问题讨论】:
-
首先,您需要添加一个 ;在你的课结束时。我有两个问题:您想使用矢量标记进行排序吗?
-
您到底想对什么进行排序?
e.marks?然后相应地更改e.ids以保持 id-marks 配对? -
您想对
ids和marks进行排序,其中ids数组根据marks值在同一索引处进行排序?例如,如果您有和ids = { 1, 2, 3}和marks = { 98, 54, 89 },您希望排序后的数组看起来像:id = {2, 3, 1}和marks = {54, 89, 98}? -
@MichaelBurr 这正是我想要的。我在我的问题中添加了示例输入/输出。
-
与range-v3、
ranges::sort(ranges::view::zip(marks, ids));。这在技术上首先按标记排序,然后按 ID。