C++ 向量的排序向量

C++ 向量的排序向量,c++,stl,vector,C++,Stl,Vector,我有 向量向量 < /P> 作为“大”向量元素的每个整数向量都有4个整数值。 我想根据第三个值对vec进行排序,它的内容向量是int(我指的是每个“内部”向量的第三个元素),这可能吗 编辑 假设我有一个函数 vector<vector<int>> vec 成本(向量) 它根据向量值计算出一些值-我也可以在比较参数中使用它吗?这对我会有更大的帮助。当然std::sort可以采用第三个参数,这是排序时要使用的比较函数。例如,可以使用lambda函数: COS

我有

向量向量 <我的C++应用程序> < /P> 作为“大”向量元素的每个整数向量都有4个整数值。 我想根据第三个值对vec进行排序,它的内容向量是int(我指的是每个“内部”向量的第三个元素),这可能吗

编辑

假设我有一个函数

    vector<vector<int>> vec 
成本(向量)

它根据向量值计算出一些值-我也可以在比较参数中使用它吗?这对我会有更大的帮助。

当然
std::sort
可以采用第三个参数,这是排序时要使用的比较函数。例如,可以使用lambda函数:

COST(vector<int>)

如果要按成本比较这两个向量,请尝试以下方法:

std::sort(vec.begin(), vec.end(),
          [](const std::vector<int>& a, const std::vector<int>& b) {
  return COST(a) < COST(b);
});
bool谓词(const std::vector&a,const std::vector&b)
{
退货成本(a)<成本(b);
}
注:

  • 以上内容也适用于C++98,我不确定C++11的使用有多广泛,也不确定您是否有兼容的编译器。否则,您当然也可以使用lambda表达式,正如sftrabbit所建议的那样
  • 你不会说什么成本回报,我只是假设了一些可排序的值,比如浮动或多头
  • 我希望在将向量传递给COST()时不要复制它,那样效率会非常低
  • COST建议使用宏,就像所有大写字母一样。不要使用宏。不要对函数使用宏名称
#包括
#包括排序(vec.begin()、vec.end()、comp)

其中
comp
为:

#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;
  }
static bool comp(常数向量&vec1,常数向量&vec2){
返回vec1[2]
只需定义使用第三个元素值的比较运算符即可。请参见此处了解详细信息:请记住lambda也是一个选项。嗯,您所有的内部
向量
s都包含4个
int
s,每个int都有一个特殊的含义?听起来您更希望将类的对象放在该向量中?在您的comparatorremark中返回
cost(a)
,如果第一个参数放在第二个参数之前,则第三个参数是严格的弱排序,返回true。这意味着a小于(即ab
随后将为null,
b[2]
引用绑定到类型为“int”的null指针
任何补救措施,任何人??
bool predicate(const std::vector<int>& a, const std::vector<int>& b)
{
    return COST(a) < COST(b);
}
#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;
  }
static bool comp(const vector<int>& vec1, const vector<int>& vec2){
    return vec1[2] < vec2[2];
}