Как указать std :: priority_queue обновить свой порядок?

У меня есть очередь приоритетов указателей на struct city . Я изменяю объекты, на которые указывают эти указатели, вне очереди с приоритетами, и хочу указать очереди с приоритетами «переупорядочить» себя в соответствии с новыми значениями.

Что мне делать?

Пример:

#include <iostream>
#include <queue>

using namespace std;

struct city {
    int data;
    city *previous;
};

struct Compare {
    bool operator() ( city *lhs, city *rhs )
    {
        return ( ( lhs -> data ) >= ( rhs -> data ) );
    }
};

typedef priority_queue< city *, vector< city * >, Compare > pqueue;

int main()
{
    pqueue cities;

    city *city1 = new city;
    city1 -> data = 5;
    city1 -> previous = NULL;
    cities.push( city1 );

    city *city2 = new city;
    city2 -> data = 3;
    city2 -> previous = NULL;
    cities.push( city2 );

    city1 -> data = 2;
    // Now how do I tell my priority_queue to reorder itself so that city1 is at the top now?

    cout << ( cities.top() -> data ) << "\n";
    // 3 is printed :(

    return 0;
}
14
задан BartoszKP 29 January 2017 в 14:06
поделиться