我编写了一个简单的 C++ 代码来了解用户定义的类数据类型上的排序函数用法,以便对类的数据成员进行排序。
但这只会对类中变量 b 的数组进行排序。因为,变量 a 的较早排序数组在排序 b 时也会受到干扰。
#include <iostream>
#include <cstring>
using namespace std;
class Entry
{
public:
int a, b;
};
bool compare1(Entry e1, Entry e2)
{
if (e1. a > e2. a) return false;
return true;
}
bool compare2( Entry e1, Entry e2)
{
if (e1. b > e2. b) return false;
return true;
}
int main()
{
int i;
vector<Entry> array(4);
array[0]. a =5 , array[0]. b =8 ;
array[1]. a =10 , array[1]. b =4 ;
array[2]. a =3 , array[2]. b =2 ;
array[3]. a =1 , array[3]. b =12 ;
sort(array.begin(), array.end(), compare1);
sort(array.begin(), array.end(), compare2);
cout << "sorted:" << endl;
for (i = 0; i< 4; i++)
cout << array[i]. a << " " << array[i].b << endl;
}
我得到的输出如下:
sorted:
3 2
10 4
5 8
1 12
如何对两个数据成员数组 - a,b 进行排序?
最佳答案
这取决于您希望元素如何排序:
成对排序,输入
a
: (1,12), (3,2), (5,8), (10,4)成对排序,输入
b
: (3,2), (10,4), ...按字典顺序成对排序:与按
a
排序相同,因为a
没有重复值.
情况 (1) 您使用 compare1
,如果 (2) 您使用 compare2
. (对于情况 (3),您将不得不编写另一个谓词,或者只使用 std::pair<int,int>
。)
情况 4:如果您想要 a
的值和 b
单独排序并破坏配对,然后您需要将值放入单独整数 vector 中并单独排序:
std::vector<int> avals(array.size()), bvals(array.size());
for (size_t i = 0; i != array.size(); ++i)
{
avals[i] = array[i].a;
bvals[i] = array[i].b;
}
std::sort(avals.begin(), avals.end());
std::sort(bvals.begin(), bvals.end());
没有办法解决这个问题。一个容器 Entry
对象只能作为一个整体移动元素。
关于c++ - 如何在显示的代码中对一个类的两个数据成员数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7434344/