À moins que la carte est énorme, ou si vous avez une autre façon de savoir que la recherche linéaire est trop lent, je commence par la recherche linéaire:
#include <iostream>
using std::cout;
#include <map>
using std::map;
#include <algorithm>
using std::find_if;
#include <boost/assign/list_of.hpp>
using boost::assign::map_list_of;
typedef map<char, int> Map;
typedef Map::key_type Key;
typedef Map::value_type Pair;
typedef Map::mapped_type Value;
struct finder {
const Value v;
finder(const Value& v) : v(v) {}
bool operator()(const Pair& p) {
return p.second == v;
}
};
Map m = map_list_of('a', 1)('b', 2)('c', 3)('d', 4)('e', 5);
int main() {
Pair v = *find_if(m.begin(), m.end(), finder(3));
cout << v.second << "->" << v.first << "\n";
}
Je suis récemment revenu à l'utilisation de C++ après 20 ans d'utilisation d'autres langues donc j'ai un peu de rouille. Existe-t-il un moyen d'implémenter finder en tant que fonction/expression lambda en ligne? – WXB13