1

0または1のみを含む2次元配列があります。STLソートアルゴリズムを使用して、行(各列で変更なし)で降順でソートしたいと思います。しかし、パラメーターを渡す方法と、sort(first、last、comp)で比較関数を記述する方法がわかりません。お気に入り:

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関数しか書くことができません:

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;
}

しかし、それは機能しません。誰かが私を助けることができますか?どうもありがとうございます。

4

2 に答える 2

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;
}
于 2012-12-21T21:01:25.897 に答える
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))
于 2012-12-21T21:49:07.193 に答える