bonjour,
j'utilise un set de pair d'unsigned int avec une function comparative sur le deuxième élément de ma pair.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
#include <set>
typedef unsigned short ushort;
 
struct compPairBySecond {
  bool operator() (const std::pair<ushort,ushort>& lhs, const std::pair<ushort,ushort>& rhs) const
  {return lhs.second < rhs.second;}
};
 
typedef std::set<std::pair<ushort,ushort> , compPairBySecond> mySet;
 
int main(){
	mySet set;
	for (int i=0; i<2 ; ++i){
		auto res = set.insert(std::pair<ushort,ushort>(i,1));
		cout << "Insertion result: " << res.second << "\n";
	}
 
	for (auto it = set.cbegin(); it != set.cend(); ++it)
		cout << "(" << it->first << ", " << it->second << ")\n";
 
        return 0;	
}
Pourquoi la deuxième insertion pair<1,1> ne marche pas?

Si je change ma fonction de comparaison pour utiliser un inférieur ou égal cela marche...
Je ne comprend pourquoi...
j'imaginais qu'avec < j'aurai en résultat le set suivant: { (0,1) , (1, 1) }
et avec un <= dans l'autre sens: { (1, 1), (0, 1) }

Pourquoi ça ne marche pas et ne puis je pas obtenir le premier cas?
Dans l'example sur sur cplusplus.com ils utilisent un inférieur strict... (http://www.cplusplus.com/reference/set/set/set/)