排序矢量对:没有匹配功能

时间:2017-09-13 08:29:13

标签: c++ sorting vector std-pair

我已按照here给出的解决方案对对象的矢量进行排序。

我得到了

linear_problem.h:275:

error: no matching function for call to

‘sort(std::vector<std::pair<int, double> >::iterator,
std::vector<std::pair<int, double> >::iterator, <unresolved overloaded
function type>)’
     std::sort(data.begin(), data.end(), compareFunc);

带代码的类是:

class Coefficients{
private:
    std::vector<std::pair<int, double>> data;

public:
    Coefficients(){}
    bool compareFunc(const std::pair<int, double> &a, const std::pair<int, double> &b){
        return a.first > b.first;
    }

    void sort(){
        std::sort(data.begin(), data.end(), compareFunc);
    }

};

我不知道会出现什么问题,因为代码非常类似于示例。

2 个答案:

答案 0 :(得分:4)

compareFunc()是一个成员函数,需要调用Coefficients的实例。

您可以将其设为static类成员函数来解决该问题:

    static bool compareFunc(const std::pair<int, double> &a, const std::pair<int, double> &b){
 // ^^^^^^
        return a.first > b.first;
    }

    void sort(){
        std::sort(data.begin(), data.end(), &Coefficients::compareFunc);
                                         // ^^^^^^^^^^^^^^
    }

答案 1 :(得分:2)

使用c ++ 14,由于lambdas

,最好的解决方案很容易编写
std::sort(v.begin(), v.end(), [](auto &left, auto &right) {
    return left.second < right.second;
});

或者您可以使用比较器:

struct comp{
    bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
        return left.second < right.second;
    }
};

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