Bonjour.

Je stocke des (cléf/valeur)s dans une std::map. J'ai un traitement qui s'intéresse à une clef et à ses voisines.

Je cherche le meilleur moyen de récupérer un itérateur sur des clefs voisines sans avoir à faire un map->find() pour chaque voisine.

Je pensais pouvoir faire une recherche en spécifiant une plage, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
int clef_triees[7] = {4, 6, 13, 16, 18, 24, 40};
 
// je dispose d'un iterateur initial sur la clef 16 : it_init
 
it_13 = map->find(13, map->begin(), it_init - 1);
it_6 = map->find(6, map->begin(), it_13 - 1);
it_4 = map->find(4, map->begin(), it_6 - 1);
 
it_18 = map->find(18, it_init + 1, map->end());
it_24 = map->find(24,it_18 + 1, map->end());
it_40 = map->find(40, it_24 + 1, map->end());
Si la recherche est dochotomique cela peut faire gagner un peu de temps. Mais je ne trouve pas de fonction qui permette de faire ça.

Je me demande si c'est utile de vouloir optimiser cela, et si oui comment le faire ?