bonjour,
j'utilise un set de pair d'unsigned int avec une function comparative sur le deuxième élément de ma pair.
Pourquoi la deuxième insertion pair<1,1> ne marche pas?
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; }
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/)
Partager