gpt4 book ai didi

c++ - 对不同的类成员进行排序

转载 作者:行者123 更新时间:2023-11-30 02:45:37 26 4
gpt4 key购买 nike

我有一个包含多个double 类型成员的类。

假设我需要创建一个函数,根据类中其中一个成员的值对类对象的 vector 进行重新排序。所以:

class myClass{
...
public:
double x, y, z;
...
}

void SpecialSort_x(std::vector<myClass>& vec) {
// re-order stuff according to values of vec[i].x
...
}

但现在,我希望能够进行相同的重新排序,但要根据类中其他成员的值(yz上面的代码)。

除了将所有对 x 的引用更改为 yz 之外,没有再创建两个与第一个相同的函数,我想制作一个单一的多态函数,它可以根据 myClass 的任何成员重新排序 vector 。

执行此操作的最佳方法是什么?

最佳答案

您可以使用 std::sort,结合 lambda 和指向成员的指针:

#include <vector>
#include <algorithm>

class MyClass
{
public:
double x, y, z;
};
typedef double MyClass::* Field;

void specialSort(std::vector<MyClass>& vec, Field field)
{
std::sort(vec.begin(), vec.end(), [field](const MyClass & a, const MyClass & b) -> bool
{
return a.*field < b.*field;
});
}

int main()
{
std::vector<MyClass> vec;
Field member = &MyClass::x;
specialSort(vec, member);

return 0;
}

您还可以使用以下方式对排序进行模板化:

template<class T>
void specialSort(std::vector<T>& vec, double T::* field)
{
std::sort(vec.begin(), vec.end(), [field](const T& a, const T& b) -> bool
{
return a.*field < b.*field;
});
}

关于c++ - 对不同的类成员进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com