Je suis très nouveau en C++, et je me demandais s'il y avait un moyen de faire un tas min en C++ à partir de la bibliothèque standard.Y at-il un moyen facile de faire un tas min en C++?
Répondre
Vous pouvez utiliser std::make_heap
, std::push_heap
, et d'autres directement, ou vous pouvez utiliser un std::priority_queue
construit sur un std::vector
ou similaire.
Les méthodes std::*_heap
sont en <algorithm>
, et le modèle std::priority_queue
est en <queue>
.
Pour clarifier: 'priority_queue
oh donc si je suis sorti de la priority_queue en C++ j'obtiendrais la valeur min? – Alex
Pour plus de précisions, le modèle entier de 'priority_queue' accepte un type de conteneur, qui par défaut est' vector
Utilisez make_heap()
et vos amis, définis dans <algorithm>
, ou utilisez priority_queue
, défini dans <queue>
. Le priority_queue
utilise make_heap
et des amis en dessous.
#include <queue> // functional,iostream,ctime,cstdlib
using namespace std;
int main(int argc, char* argv[])
{
srand(time(0));
priority_queue<int,vector<int>,greater<int> > q;
for(int i = 0; i != 10; ++i) q.push(rand()%10);
cout << "Min-heap, popped one by one: ";
while(! q.empty()) {
cout << q.top() << ' '; // 0 3 3 3 4 5 5 6 8 9
q.pop();
}
cout << endl;
return 0;
}
+1 pour indiquer (subtilement) que 'priority_queue' est un tas maximum. – avakar
Vous posez des questions et n'en acceptez aucune. Est-ce que ce comportement est par habitude ou choix? – Siddharth