Eliminations de doublons non-consécutifs
Bonjour,
J'ai un :
Code:
vector< pair<int, int> > paires;
dont je cherche à conserver l'unicité de l'attribut second des pairs.
Mettons que j'ai :
Code:
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 |
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.
Au final, j'ai réussi à le faire :
Code:
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()) ; |
Avec les fonctions :
Code:
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);
} |
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".
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.