Ceci est une suite à une question précédente que j'avais (Complexity of STL max_element).effacer l'élément max du jeu STL
Je veux faire ressortir l'élément max d'un ensemble, mais je rencontre des problèmes.
est ici à peu près mon code:
set<Object> objectSet;
Object pop_max_element() {
Object obj = *objectSet.rbegin();
set<Object>::iterator i = objectSet.end()--; //this seems terrible
objectSet.erase(i); //*** glibc detected *** free(): invalid pointer
return obj;
}
Plus tôt j'ai essayé objectSet.erase(objectSet.rbegin());
mais le compilateur se plaint qu'il n'y avait pas de fonction concordante (je devine qu'il n'aime pas le reverse_iterator). Je sais qu'il n'y a pas de vérification pour un ensemble vide, mais ça échoue quand objectSet.size() >> 0.
'* objectSet.rbegin();' est-ce une faute de frappe? vous déréférencer l'ensemble? –
Non, c'est l'itérateur qui est déréférencé. Le point se lie plus étroitement que l'étoile. –