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);
});