我在C ++中有一个看起来像
的数组95 52
95 20
95 67
76 25
76 250
我希望按第一列排序,然后排第二列。一般来说,我可能有$ n $列,所以我可能需要一个递归函数。任何人都有快速有效的方法吗?最终目标是获取唯一行的列表。
答案 0 :(得分:4)
将数据放入向量矢量中,并使用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 :(得分:0)
如果要对数组进行排序,将第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;
如果要对数组进行排序,请指定要排序的列,并在每个时间获得一次结果。
每次要排序时创建一个排序对象。
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