如何根据c +值的比例对c ++中的向量进行排序

0 c++ sorting stdvector

我有一个向量,它的元素由两个整数组成.我想先计算每个元素的这2个整数的比率,然后根据这个比率对向量进行排序.

Ale*_*ler 8

看看std::sort.该函数允许您使用自己指定的谓词对集合进行排序.在下面的示例代码创建一个vectorpair第 该cmp函数通过计算每个对的比率来比较这些对中的两个,并且true如果a比率大于b's则返回.

因此,您需要指定一个函数(或函数对象,或lambda或其他),它接受集合元素类型的两个参数并进行比较.如果a应该之前b,那么函数应该返回true,如果没有,那么它应该返回false.该函数是第三个参数std::sort

#include <algorithm>
#include <vector>

bool cmp(const std::pair<int, int>& a, const std::pair<int, int>& b)
{
    // you should probably also add some code to prevent dividing by zero...
    return (static_cast<double>(a.first)/a.second) > (static_cast<double>(b.first)/b.second);
}

int main()
{
    std::vector<std::pair<int, int> > pairs;
    std::sort(pairs.begin(), pairs.end(), &cmp);
}
Run Code Online (Sandbox Code Playgroud)