c++ - 如何在显示的代码中对一个类的两个数据成员数组进行排序

标签 c++ sorting

我编写了一个简单的 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 进行排序?

最佳答案

这取决于您希望元素如何排序:

  1. 成对排序,输入a : (1,12), (3,2), (5,8), (10,4)

  2. 成对排序,输入b : (3,2), (10,4), ...

  3. 按字典顺序成对排序:与按 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/

相关文章:

c++ - 在 C++ 中初始化为 NULL 的字符串

c# - 如何对可观察集合进行排序?

C - 从任何给定起点向外按螺旋顺序打印二维数组

javascript - 对 OL 下的 LI 命令进行排序

java - 使用java根据静态 map 中提到的顺序进行排序

c++ - 修改 Windows 磁盘驱动程序以使用更新的控制代码,如 IOCTL_DISK_GET_DRIVE_GEOMETRY_EX

C++ 指针和数组

c++:成员类之间的构造函数依赖性

java - 在 Java 中按星期几从星期一到星期日排序

没有新返回对象的 C++ 算术运算符