Нет, вы должны перебрать std :: map и проверить все значения вручную. В зависимости от того, что вы хотите сделать, вы можете обернуть std :: map в простой класс, который также кэширует все значения, которые вставляются в карту, во что-то, что легко доступно для поиска и не допускает дублирования, как std ::задавать. Не наследуйте от std :: map (у него нет виртуального деструктора!), Но оберните его так, чтобы вы могли сделать что-то вроде этого:
WrappedMap my_map< std::string, double >;
my_map[ "key" ] = 99.0;
std::set< double > values = my_map.values(); // should give back a set with only 99.0 in it
В качестве альтернативы использованию собственной карты можно использовать двунаправленную карту Boost, которую легко найти в сообщениях ниже или в Google.
Это действительно зависит от того, что вы хотите сделать, как часто вы хотите это делать, и от того, насколько сложно катить свой собственный небольшой класс-обертку по сравнению с установкой и использованием Boost. Я люблю Boost, так что это хороший путь, но есть кое-что приятное и полное в создании собственного класса-обёртки. У вас есть преимущество в непосредственном понимании сложности операций, и вам может не потребоваться полное обратное сопоставление значений => ключей, предоставляемое двунаправленной картой Boost.