繁体   English   中英

如何使用C ++按第一,第二,第三,…列对2d数组排序?

[英]How to sort 2d array by first, then second, then third, … columns using C++?

我在C ++中有一个看起来像的数组

95 52
95 20
95 67
76 25
76 250

我想按第一列进行排序,然后按第二列进行排序。 通常,我可能有$ n $列,因此可能需要递归函数。 任何人都可以快速有效地做到这一点吗? 最终目标是获得唯一行的列表。

将数据放在向量的向量中,然后使用std::sort

vector<vector<int> > vv;
// Put data in the vector...
vector<int> v3 = {95, 67};
vv.push_back(v3);
vector<int> v4 = {76, 25};
vv.push_back(v4);
vector<int> v1 = {95, 52};
vv.push_back(v1);
vector<int> v2 = {95, 20};
vv.push_back(v2);
vector<int> v5 = {76, 250};
vv.push_back(v5);
// Sort the data
sort(vv.begin(), vv.end());

演示。

std::vector比较是按字典顺序进行的,无论其中有多少项目都可以使用。

  1. 如果要对数组进行排序,则以第1列为主要索引,以2列为次要,依此类推,并获得最终结果。

    自定义排序功能将完成这项工作。

     struct SortAll { bool operator() (int *item1, int *item2) { for (int i = 0; i < COLUMN_COUNT; ++i) { if (item1[i] < item2[i]) { return true; } else if (item1[i] > item2[i]) { return false; } } return false; } } sort_all; 
  2. 如果要对数组进行排序,请指定要排序的列,然后每次获取一个结果。

    每次要排序时都创建一个排序对象。

     struct SortEach { public: SortEach(int column) : column(column) { } bool operator() (int *item1, int *item2) { return item1[column] < item2[column]; } private: int column; } 

用法:

int arr[LENGTH][COLUMN_COUNT];
SortEach sort_2(2);
std::sort(&arr[0], &arr[LENGTH], sort_all); // sort by all column
std::sort(&arr[0], &arr[LENGTH], sort_2); // sort by column 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM