对没有空值的多维向量进行排序

时间:2012-12-18 16:30:53

标签: c++ sorting vector

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如何在排序时忽略这些值? / p>

4 个答案:

答案 0 :(得分:2)

如果您只想对已填充的部分进行排序,请使用

sort(sort_arrsort_arr.begin(), sort_arrsort_arr.begin()+2);

答案 1 :(得分:0)

你想要实现的目标能否更具体一点?排序时可以提供自己的比较运算符

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

有关详细信息,请阅读手册 http://www.cplusplus.com/reference/algorithm/sort/

答案 2 :(得分:0)

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

根据您提供的信息,您当然可以这样做:

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

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

答案 3 :(得分:0)

C ++中的int永远不会NULL。如果您执行以下操作:

int val = (int)NULL;

val的值为0,与价值为int的任何其他0无法区分。如果您想要忽略多维向量中的NULL个“洞”,我建议您使用Nullable<int>