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:
	
| 12
 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:
	
| 12
 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:
	
| 12
 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.