échec d'insertion dans un std::set utilisant une fonction de comparaison, quel est le problème?
bonjour,
j'utilise un set de pair d'unsigned int avec une function comparative sur le deuxième élément de ma pair.
Code:
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/)