2013-02-20 2 views
0

내 문제는 다음과 같습니다priority_queue 선언과 부울 연산자 <선언

  • 내가 2 개 클래스 플러스 주 내 프로그램이;

  • 클래스의 멤버 함수 내에서 priority_queue를 선언했습니다.

  • 나는 비교를 정의해야하고 내가 사용해야하는 코드가 생각 :

    // Determine priority (in the priority queue) 
    bool operator < (const node & a, const node & b) 
    { 
        return a.getPriority() > b.getPriority(); 
    } 
    

질문 :이 코드 조각을 삽입해야을? 누군가 나를 도울 수 있습니까?

감사합니다.

+0

왜 'node'의 멤버 함수로 만들지 않습니까? – jrok

+0

내가 오류를 받기 때문에 : "operator"함수에 대한 너무 많은 매개 변수 – user1783116

+1

멤버 연산자 함수는 단지 1 개의 매개 변수를 취할 수 있습니다 :'bool operator <(const node & other) {return this-> priority jrok

답변

1

operator<은 아마도 node에 대한 불량한 것으로 보입니다. 논리적으로 비교할 수있는 노드입니까? priorty_queue 컨텍스트 외부의 노드 비교가 우선 순위를 비교해야합니까? 어쩌면 그들은 자신의 위치 또는 그들이 포함 할 수있는 다른 것을 비교해야 할 것입니다. operator<을 입력하면 다른 5 개의 비교 연산자를 사용하는 것이 좋습니다. node < node이 실제로 비교 대상이 명확하지 않은 경우 노드에 operator<을 제공하지 마십시오. 이 같은 경우는 ...

struct NodeComparer 
{ 
    bool operator()(const node& left, const node& right) 
    { 
     return left.GetPriority() > right.GetPriority(); 
    } 
} 

을 ... priority_queue에 사용자 정의 비교자를 제공하는 것이 좋습니다

std::priority_queue<node, std::vector<node>, NodeComparer> nodeQueue; 

당신의 priority_queue가 원하는대로 작업 할 수 있지만 비논리적 기능을 추가하지 않습니다이 방법 node.

+0

좋아, 너 무슨 뜻인지 알았어. 문제는 여전히 남아 있습니다 : 클래스 A의 멤버 함수 내에 우선 순위 큐가 있고 클래스 "노드"를 별도로 정의했습니다. 어디에서 코드를 삽입해야합니까 ??? – user1783116

+0

나는 pq를 사용하는 멤버 funtion을 포함하는 클래스 바로 위에 struct를 put했다. 이제는 작동하는 것처럼 보인다! 위의 조언을 주셔서 감사합니다 – user1783116

+0

@ user1783116'priority_queue'를 포함하는 클래스의 구조체를 private 클래스로 중첩시킬 수도 있습니다. 이는 해당 클래스의 구현 세부 사항이기 때문에 선호됩니다. – David

0

이 연산자는 priority_queue가 선언 된 곳에서 표시되어야합니다. 우선 순위 큐가 멤버에만 존재하기 때문에 메서드를 구현하는 .cpp 파일에 주어진 메서드 정의 바로 위에 연산자의 정의를 배치합니다.

+0

네, 맞습니다. 실제 문제는 "노드"가 클래스이고 "A-star"는 내가 priority_queue를 사용했던 멤버 함수를 가진 또 다른 클래스입니다. 어떻게해야합니까? – user1783116