以下のコードは、C++ の priority_queue に格納されている値をダンプしようとしています:
priority_queue<Point, vector<Point>, myCmp> pq;
int i;
for (i = 0; i < 10; i++) {
Point p(i,i);
pq.push(p);
}
const Point& p0 = pq.top();
while(!pq.empty()) {
cout<<p0.x<<p0.y<<endl;
pq.pop();
}//I'm getting output like "00 11 22 33 ... 99"
コードのコメントにあるように、私の参照変数 p0 は、キューが値をポップするたびに変化し続けます。p0 は常に (0,0) オブジェクトへの参照、つまり最初のキューの先頭であるべきだと思うので、それは私には意味がありません。私は私が使用できることを知っています
Point p0 = pq.top()
フロント要素のコピーを取得して問題を回避します。それでも、誰かが参照を使用することの問題を説明できますか?
PS C++ キューについても同じことを行いましたが、この問題は観察されませんでした。