Le problème vient d'une erreur de compréhension de lower_bound, il faut relire la spec:
http://msdn.microsoft.com/en-us/li [...] 71%29.aspx
En français lower_bound ne renvoie pas une valeur inférieure à la valeur de clé que tu passes en paramètre mais une valeur supérieure ou égale.
upper_bound renvoie la prochaine valeur strictement supérieure.
Dans ton exemple
Code :
- lower_bound de 3 = 3
- upper_bound de 3 = 7
|
Comme dans une map de la STL les éléments sont ordonnés par valeur de clé croissante, si tu veux la valeur de clé inférieure à celle que tu cherches il te suffirait de prendre l'élément immédiatement avant lower_bound, après avoir vérifier que tu es bien dans la limite de la map évidemment.
par exemple, si tu veux écrire ta propre fonction:
Code :
- template <class T>
- map<T>::iterator GetLastLowerElt(map<T> &myMap, const T &val)
- {
- map<T>::iterator it = myMap.lower_bound(val);
- if (it != myMap.end() && it != myMap.begin()) {
- --it;
- }
- return it;
- }
|
De plus si tu veux t'éviter des plantages avant de l'utiliser il faut vérifier si l'iterator donné par un appel à lower_bound ou upper_bound est bien != de la fin de la map (.end()), sinon boum.
---------------
Mes feedbacks * Ma galerie photo