Jeżeli mapa jest ogromna, lub masz jakiś inny sposób, wiedząc, że przeszukiwanie liniowe jest zbyt powolny, to bym zacząć przeszukiwanie liniowe:
#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";
}
Jestem niedawno z powrotem przy użyciu C++ po ponad 20 latach używania innych języków, więc mam sporo rdzy. Czy istnieje sposób implementacji Findera jako wbudowanej funkcji/wyrażenia lambda? – WXB13