개체의 우선 순위 큐를 만들고 싶습니다. 특히 (int, int) 쌍입니다. 대기열에는 우선 순위가 지정된 쌍이 있어야합니다. 당신이 볼 수 있듯이 그것은 상단에 남아 있도록개체의 우선 순위 큐를 사용하는 C++
#include <iostream>
#include <queue>
using namespace std;
class saPair{
public:
int s;
int a;
double priority;
saPair(int s, int a, double priority){
this->s = s;
this->a = a;
this->priority = priority;
}
};
// the priority menmber variable determines the priority in the queue
// highest priority pair of (int, int) stays on the top
bool operator< (const saPair& x, const saPair& y) {
return x.priority < y.priority;
}
int main()
{
priority_queue<saPair> pq;
pq.push(saPair(0,0, 0.3));
pq.push(saPair(0,1, 0.1));
pq.push(saPair(0,3, 0.5));
pq.push(saPair(0,3, 5));
cout << pq.top().a << endl;
pq.pop();
cout << pq.top().a << endl;
pq.pop();
cout << pq.top().a << endl;
}
은 쌍 (0,3)은 가장 높은 우선 순위를 가지고있다. 하지만 구현의 문제는 다른 우선 순위로 (0,3) 쌍을 다시 추가하면 이미 존재하는 (0,3) 쌍의 우선 순위를 바꾸는 대신 새 요소를 대기열에 추가한다는 것입니다.
내 요구 사항에 잘못된 데이터 구조를 선택했다고 느낍니다. < 연산자에 대한 연산 오버로드로 새로운 saPair (int, int) 클래스를 정의하여 키 값을 가져 오는 맵핑을 시도했습니다. 하지만 그게 제대로 작동하지 않는 것 같습니다 ..
진행 방법에 대한 제안이 있으십니까? 또는 수정
대기열이므로 고유성에 대한 요구 사항이 없습니다. 네가 원하는 것은 아마도 세트 야?! – Arash
예. 대기열을 직접 사용할 수있는 방법이 없습니다. 대체 데이터 구조를 찾고 있습니다. 그것은 공통적으로 발생하는 데이터 구조와 같은 느낌이 있지만 그것에 간단한 해결책을 찾을 수 없습니다. 객체 및 해당 객체에 할당 된 해당 우선 순위입니다. 우선 순위에 따라 개체를 정렬하십시오. 나는 이것을 만족시키는 데이터 구조가 필요하다. – emperorspride188