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

好吧,它们不是空值。它们是 0,这是一个完全有效的排序数字。如果您只想要 2 行,则只需添加两行。只是做int n = 2而不是4.

有了您提供的信息,您当然可以这样做:

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

这只会对前两行进行排序。

于 2012-12-18T16:35:33.353 回答
0

intC++ 中的 an永远不是NULL. 如果您执行以下操作:

int val = (int)NULL;

的值为 ,与任何其他val值为的0没有区别。如果你真的会在你想要被忽略的多维向量中有那些“洞”,我建议使用.int0NULLNullable<int>

于 2012-12-18T16:37:27.083 回答