Bonjour,

J'ai un :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
vector< pair<int, int> > paires;
dont je cherche à conserver l'unicité de l'attribut second des pairs.

Mettons que j'ai :

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
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 : 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()) ;
Avec les fonctions :

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);
}
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.