排序矢量矢量

paw*_*wel 9 c++ stl vector

我有

    vector<vector<int>> vec 
Run Code Online (Sandbox Code Playgroud)

在我的c ++应用程序中.

每个作为"大"向量元素的整数向量都有4个INT值.我想基于它的内容向量(我的意思是每个"内部"向量第三元素)的第三个值对vec进行排序 - 是否可能?

编辑

假设我有一个功能

COST(vector<int>)
Run Code Online (Sandbox Code Playgroud)

根据我的矢量值计算出一些值 - 我可以在比较参数中使用它吗?它会帮助我更多.

Jos*_*eld 26

当然是啦.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];
});
Run Code Online (Sandbox Code Playgroud)

或者,您可以传递任何其他可以使用签名调用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);
});
Run Code Online (Sandbox Code Playgroud)

  • 注意第3个参数是严格的弱排序,如果第一个参数应该放在第二个参数之前,则返回true.这转化为小于(即a <b).这是因为OP想要按降序排序. (2认同)