Неожиданное поведение приоритетной очереди STL в c ++ - PullRequest
0 голосов
/ 20 апреля 2020

Я пытался применить алгоритм простых чисел, используя очередь с приоритетами. когда я пытаюсь выбрать элемент sh в очереди с приоритетами, приоритет элемента меняется на некоторое неожиданное значение .

Когда я запускаю код 2 раза, приоритет одного и того же элемента на одном и том же входе изменяется

struct compare{
    bool operator()(pair<int, double> p1, pair<int, double> p2){
        return p1.second > p2.second;
    }
};
priority_queue<pair<int,double>, vector<pair<int, double> >, compare> Q;

//temp is used to display the elements of the Q
priority_queue<pair<int,double>, vector<pair<int, double> >, compare> temp;

while(!Q.empty()){
        int u = Q.top().first;
        Q.pop();
        temp = Q;
        PQ[u] = false;

        for(int i = 0; i < adj[u].size(); i++){
            if(cost[adj[u][i].first] > adj[u][i].second && PQ[adj[u][i].first] == true){

                Q.push(make_pair(adj[u][i].first,adj[u][i].second);
            }

        }
//displaying elements of the priority queue: Q
        temp = Q;
        while(!temp.empty()){
            cout << temp.top().first << " = " << temp.top().second << endl;
            temp.pop();
        }
        cout << "\n\n";
    }

выход для первого запуска

7 = 6.95326e-310
8 = 6.95326e-310
5 = 6.95336e-309
6 = 6.95336e-309
1 = 1.41421
1 = 32767
3 = 32767
8 = 32767
5 = 32767
3 = 32767
2 = 32767
7 = 32767
6 = 32767
4 = 32767
4 = 32767
2 = 32767

выход для 2-го прогона

5 = 0
6 = 0
1 = 1.41421
8 = 12.53
7 = 12.53
1 = 32767
3 = 32767
8 = 32767
5 = 32767
3 = 32767
2 = 32767
7 = 32767
6 = 32767
4 = 32767
4 = 32767
2 = 32767
...