0
vector<vector<int>> sort_arr;
int n = 4, k = 2;

sort_arrsort_arr.resize(n);
for(int i = 0 ; i < n ; ++i){
sort_arrsort_arr[i].resize(k);
}

int sum = 16;
for(int i = 0 ; i < 2 ; ++i){
    for(int j = 0 ; j < 2 ;  j++){
    sort_arrsort_arr[i][j] = sum;
    sum--;
    }
}

sort(  sort_arrsort_arr.begin(), sort_arrsort_arr.end());

ベクトルは 4x2 で、最初の 2 行にのみ値を入れたので、ベクトルを並べ替えると、最初の 2 行が 0,0 と 0,0 として取得されます。並べ替え中にこれらの値を無視するにはどうすればよいですか?

4

4 に答える 4

2

記入した部分だけを並べ替えたい場合は、

sort(sort_arrsort_arr.begin(), sort_arrsort_arr.begin()+2);
于 2012-12-18T16:38:27.723 に答える
0

あなたが達成したいことについて、もう少し具体的に教えていただけますか?ソート時に独自の比較演算子を提供できます

 template <class RandomAccessIterator, class Compare>
  void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

詳細については、マニュアル http://www.cplusplus.com/reference/algorithm/sort/を参照してください。

于 2012-12-18T16:35:16.630 に答える
0

それらは null 値ではありません。それらは 0 です。これは、並べ替えるのに完全に有効な数値です。2 行だけが必要な場合は、2 行だけ追加します。int n = 2の代わりに行うだけです4

ただし、提供した情報を使用して、もちろん次のことができます。

sort(sort_arr.begin(), std::next(sort_arr.begin(),2));

これにより、最初の 2 行のみが並べ替えられます。

于 2012-12-18T16:35:33.353 に答える
0

C++の anintは neverNULLです。次の場合:

int val = (int)NULL;

の値は でvalあり、値が である他の値と0区別できません。多次元ベクトルに無視したい「穴」が本当にある場合は、 を使用することをお勧めします。int0NULLNullable<int>

于 2012-12-18T16:37:27.083 に答える