我有一个2维数组,只包含0或1。 我想使用STL排序算法按行按降序排序(每列没有变化)。但我不知道如何传递参数以及如何在sort(first,last,comp)中编写compare函数; 喜欢:
0 1 1 1
1 1 0 1
1 0 1 0
将按如下方式排序:
1 1 0 1
1 0 1 0
0 1 1 1
我的数据结构是这样的:
int **table = 0;
table = new int *[row];
for(int i=0;i<row;i++)
table[i] = new int[column];
我只能写这样的排序函数:
sort(a[0], a[0]+row, compare_function);
bool compare_function(int a[], int b[])
{
int i =0;
while(a[i]==0 ||a[i]==1)
{
if(a[i]>b[i])
return true;
else
i++;
}
return false;
}
但它不起作用。有人能帮我吗? 非常感谢你。
答案 0 :(得分:0)
将比较功能更改为:
bool comp(const int a[], const int b[]){
int sum1 = std::accumulate(a, a + column, 0);
int sum2 = std::accumulate(b, b + column, 0);
return sum1 < sum2;
}
答案 1 :(得分:0)
你的排序电话看起来不对我(虽然你从未说过a
是什么)。它应该是sort(table, table+row, compare_function)
但无论如何我都会有点不同(std::lexicographical_compare
来自<algorithm>
):
struct compare_rows {
const int cols;
compare_rows(int cols_) : cols(cols_) {}
bool operator()(const int a[], const int b[]) const {
// a b reversed to give descending sort
return lexicographical_compare(b, b+cols, a, a+cols);
}
};
并使用它:
sort(table, table+row, compare_rows(column))