0

私は STL コンテナーとそれらがサポートする比較関数/ファンクターをいじっていますが、priority_queue が通常の厳密な弱い順序付けに従っていないことがわかりました。理由を理解しようとしていますが、それを理解することはできません。ポインターが役立ちます。

また、このブログでは、priority_queue が厳密な弱い順序付けに従っていないことにも言及しました。ここにリンクの説明を入力

#include "STL.h"
#include "queue"
#include "vector"
#include "iostream"
#include "functional"
using namespace std;

typedef bool(*func)(const int& val1 , const int& val2);

bool strict_weak_order_function(const int& val1 , const int& val2){
    return val1 > val2;
}

bool comparer_function(const int& val1 , const int& val2){
    return !strict_weak_order_function(val1 , val2);
}

struct Compaper_functor{
    bool operator()(const int& val1 , const int& val2){
        return !strict_weak_order_function(val1 , val2);
    }
};


void runPriorityQueue(void){
    //priority_queue<int , vector<int> , func > pq(comparer_function);
    priority_queue<int , vector<int> , Compaper_functor > pq;
    int size;
    cin >> size;
    while(size--){
        int val;
        cin >> val;
        pq.push(val);
    }
    while(!pq.empty()){
        cout <<'\n'<< pq.top() << '\n';
        pq.pop();
    }
}
4

1 に答える 1