向量的排序矢量(Sort vector of vectors)

2019-08-07 11:34发布

我有

    vector<vector<int>> vec 

在我的C ++应用程序。

为“大”向量的元素整数每向量具有4倍INT的值。 我想在第三值排序VEC筑底的它的整数(我的意思是每一个“内部”矢量第三元素)的含量载体 - 这可能吗?

编辑

比方说,我有一个函数

COST(vector<int>)

其计算我一些价值根据我的矢量值 - 我可以用它比较 - 参数呢? 它会帮助我很多。

Answer 1:

当然是啦。 std::sort可以采取的第三参数,该参数是分选时使用的比较函数。 例如,你可以使用lambda函数:

std::vector<std::vector<int>> vec;
// Fill it

std::sort(vec.begin(), vec.end(),
          [](const std::vector<int>& a, const std::vector<int>& b) {
  return a[2] < b[2];
});

或者,也可以通过其他任何可调用与签名bool(const std::vector<int>&, const std::vector<int>&)诸如一个或算符函数指针。


响应编辑:简单地套用你的COST函数, ab

std::sort(vec.begin(), vec.end(),
          [](const std::vector<int>& a, const std::vector<int>& b) {
  return COST(a) < COST(b);
});


Answer 2:

如果您想通过成本两个向量比较,试试这个:

bool predicate(const std::vector<int>& a, const std::vector<int>& b)
{
    return COST(a) < COST(b);
}

笔记:

  • 上述工作与C ++ 98也一样,我不知道关于使用C ++ 11的范围以及是否你有一个兼容的编译器。 否则,你当然可以使用lambda表达式,也为sftrabbit建议。
  • 你不说什么样的代价的回报,我只是认为像浮或长一些排序值。
  • 我希望通过它的成本(当你不复制的载体),这将是可怕的效率低下。
  • COST表明宏,像所有UPPERCASE_NAMES。 不要使用宏。 不要为函数使用的宏名。


Answer 3:

#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;

// This makes the sort be according to column 2 and ascending
bool sortFunc( const vector<int>& p1,
           const vector<int>& p2 ) {
 return p1[1] < p2[1];
 }

int main() {

  srand(time(NULL));

  // Creates and initializes 10 x 4 vector
  vector< vector<int> > vec;
  for( int i=0; i<10; i++ ) {
   vector<int> tmpVec;
   for( int j=0; j<2; j++ ) {
  tmpVec.push_back( rand()%10 );
   }
   vec.push_back( tmpVec );
  }

  // Print out the pre-sorted vector
 cout << "Pre-sorting state:" << endl;
  for( int i=0; i<vec.size(); i++ ) {
   for( int j=0; j<vec[i].size(); j++ ) {
  cout << vec[i][j] << " ";
  }
cout << endl;
}
  cout << endl;

  // Do the sorting according to column 2
  sort(vec.begin(), vec.end(), sortFunc);

  // Print out the post-sorted vector
   cout << "Post-sorting state:" << endl;
   for( int i=0; i<vec.size(); i++ ) {
    for( int j=0; j<vec[i].size(); j++ ) {
  cout << vec[i][j] << " ";
    }
   cout << endl;
   }

  return 0;
  }

来源: https://shihho.wordpress.com/2012/11/28/sort_with_vectors/



文章来源: Sort vector of vectors
标签: c++ stl vector