Bonjour,
J'ai un :
dont je cherche à conserver l'unicité de l'attribut second des pairs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part vector< pair<int, int> > paires;
Mettons que j'ai :
je souhaite supprimer 2 des paires n°1, 3 et 4, peu importe lesquelles et n'en conserver donc qu'une seule sur les 3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 paires.push_back( make_pair(5, 6) ); // paire n°0 paires.push_back( make_pair(0, 5) ); // paire n°1 paires.push_back( make_pair(6, 7) ); // paire n°2 paires.push_back( make_pair(2, 5) ); // paire n°3 paires.push_back( make_pair(1, 5) ); // paire n°4 paires.push_back( make_pair(1, 8) ); // paire n°5
Au final, j'ai réussi à le faire :
Avec les fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 sort(paires.begin(), paires.end(), &trie_les_paires); vector< pair<int, int> >::iterator newIteratorOfEnd = unique(paires.begin(), paires.end(), &supprime_les_doublons); paires.erase(newIteratorOfEnd, paires.end()) ;
Je trie mes paires dans l'ordre croissant des attributs "second". Je supprime les copies consécutives qui possèdent le même élément "second". Puis ensuite je supprime les dernières entrées "inutiles".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 bool trie_les_paires(const pair<int, int> & a, const pair<int, int> & b) { return (a.second < b.second); } bool supprime_les_doublons(const pair<int, int> & a, const pair<int, int> & b) { return (a.second == b.second); }
Y-a-t-il une fonction de la stl spécifique à cette opération ? Ou peut-on faire mieux ?
Je précise que j'ai simplifié le problème : je compare en fait des objets plus complexes ...
Merci.
Flo.
Partager