c++ - 根据 2 个参数对 vector 进行排序

标签 c++ sorting vector

<分区>

struct bvp{
    unsigned b;
    unsigned v;
    unsigned p;
};

vector bvpVec;

现在我想先按 b 然后按 v 对 vector bvpVec 进行排序。我可以仅使用 b 使用 std::sort() 进行排序。但是我不知道如何使用 bvpVec 先按 b 然后再按 p 排序。例如。如果我的 vector 是:

(b,v,p)
(1,4,2)
(0,82,0)
(55,1,0)
(0,81,0)
(2,30,0)

那么我要排序如下:

(b,v,p)
(0,81,0)
(0,82,0)
(1,4,2)
(2,30,0)
(55,1,0)

我的 vector bvpVec 也很大,所以如果有人可以建议任何比 std::sort() 更快的排序过程,我会添加它。

最佳答案

您可以提供自定义比较,并将其作为第三个参数传递给 std::sort。

bool comp(const bvp& lhs, const bvp& rhs) {
    return lhs.b < rhs.b || (lhs.b == rhs.b && lhs.p < rhs.p);
}

std::sort(bvpVec.begin(), bvpVec.end(), comp);

或者您可以为 bvp 提供运算符<。

bool operator<(const bvp& lhs, const bvp& rhs) {
    return lhs.b < rhs.b || (lhs.b == rhs.b && lhs.p < rhs.p);
}

std::sort(bvpVec.begin(), bvpVec.end());

如果你使用 C++11,你甚至可以尝试 lambda

std::sort(bvpVec.being(), bvpVec.end(), 
          [](const bvp& lhs, const bvp& rhs) { 
              return lhs.b < rhs.b || (lhs.b == rhs.b && lhs.p < rhs.p);
          });

关于c++ - 根据 2 个参数对 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418364/

相关文章:

c++ - 如何在 vector<vector<pair<int,int>> 中插入一个 vpii >

c++ - boost::asio 和使用异步的多个客户端连接

android - Swift vs Kotlin 在排序数组上的表现

java - 有什么方法可以找到出现以下索引错误的原因吗?

c++ - vector 循环的起始值

c++ - 如何有效地将结构 vector 写入文件?

java - JNI - 如何填充从 C++ 传递到 Java 的字符串

c++ - Eigen LLT 模块给出不正确的结果?

java - 了解泛型排序的基础知识

sorting - Cakephp 3.3 按多列排序分页结果