#include <functional>
#include <queue>
#include <vector>
#include <iostream>
struct Temp
{
int p;
std::string str;
};
struct TempCompare
{
bool operator()(Temp const & a, Temp const & b)
{
return a.p > b.p;
}
};
int main() {
std::priority_queue<Temp, std::vector<Temp>, TempCompare> pq;
//Enable and Disable the following line to see the different output
//{Temp t; t.p=8;t.str="str1";pq.push(t);}
{Temp t; t.p=8;t.str="str2";pq.push(t);}
{Temp t; t.p=9; t.str="str1";pq.push(t);}
{Temp t; t.p=9; t.str="str2";pq.push(t);}
while(!pq.empty())
{
std::cout << pq.top().p << " " << pq.top().str << std::endl;
pq.pop();
}
}
メインプログラムの4行目を有効または無効にして実行します。あなたはpriority_queueからのポップアップ時に問題が発生しました。これはstd :: priority_queueのバグですか?
8 str1
8 str2
9 str2
9 str1
はずの行動が一貫してもらうのが有効になったときには、その無効が
8 str2
9 str1
9 str2
のときの出力は、あなたが得ますか?
等しい要素に対してソートが「安定」であることを示す文書はありますか?そうでない場合、その動作は可能であるように見えますが、必ずしも期待したものとは限りません。 –
['std :: stable_sort'](http://en.cppreference.com/w/cpp/algorithm/stable_sort)のような安定したソートアルゴリズムがありますが、[heapsortはそれらの1つではありません](https:// 19336881/why-isnt-heapsort-stable)。 –