2017-09-13 9 views
0

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

}; 

나는 코드가 꽤 예처럼이기 때문에 잘못 될 수있는 것의 아무 생각이 없습니다.

+3

'compareFunc'는'Coefficients'의 멤버 함수입니다. 'std :: sort'가 가지고 있지 않은'Coefficients' 타입의 객체로만 호출 될 수 있습니다. 비교 함수를'Coefficients'의 외부에 두거나'static '으로 만들겠습니까? – nwp

답변

4

compareFunc()은 멤버 함수이며 Coefficients 인스턴스를 호출해야합니다. C++ (14)는, 가장 좋은 방법은 람다

std::sort(v.begin(), v.end(), [](auto &left, auto &right) { 
    return left.second < right.second; 
}); 

또는 감사를 작성하는 것은 매우 쉽습니다 사용

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); 
             // ^^^^^^^^^^^^^^ 
    } 
+0

우수,이 작동합니다. C++에서 그다지 많은 경험이 없기 때문에 나는 무슨 일이 일어나고 있는지 알지 못했습니다. –

2

:

당신은 그 문제를 해결하기 위해 그것을 static 클래스 멤버 함수를 만들 수 있습니다 당신은 같은 비교기를 사용할 수 있습니다 :

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