2017-11-02 1 views
0

푸시()에서 제대로 작동하지 않는 기능을 비교C++ 사용자 정의와 우선 순위 큐 나는이 같은 C++ 우선 순위 큐를 정의

bool mygreater(pair<int,int> v1, pair<int,int> v2) { 
     return v1.first > v2.first; 
} 

그러나 우선 순위 큐에 int 쌍의 벡터를 푸시하려고하면 다음을 포함한 많은 오류가 계속 발생합니다.

error: no matching function for call to ‘std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int> >, bool (*)(std::pair<int, int>, std::pair<int, int>)>::push(std::vector<std::pair<int, int> >&)’ frontier.push(temp); 

우선 순위 대기열로 이동하려는 시도에서 오류의 원인을 아는 사람이 있습니까? 어떤 도움이라도 대단히 감사합니다.

+0

어떻게 현재 int 쌍의 벡터를 대기열로 푸시하고 있습니까? –

+0

기본적으로 다음과 같습니다. temp.push_back (make_pair (sr, sc)); frontier.push (임시); –

답변

0

이 오류는 사용자 지정 비교와 관련이 없습니다. 이 작업을 수행 할 경우 동일한 오류가 발생합니다 :

std::priority_queue<int> q; 
std::vector<int> v; 
q.push(v); 

std::priority_queue::push는, 그 전체가 아닌 벡터를 저장하고 어떤 유형의 단일 개체를합니다. 저장하려는 유형은 pair<int,int>이지만 vector<pair<int,int>>을 푸시하려고합니다.

+0

감사합니다! 선언문에서 벡터 > 부분이 큐 자체의 기본 컨테이너를 정의하고있는 것임을 알지 못했습니다. 첫 번째 인수는 실제로 벡터 여야합니다. 도움에 감사드립니다! –