2011-12-09 3 views
2

Say есть карта: typedef map<int, string> MyMap;Как пройти карту по значению

Я хотел бы, чтобы пересечь его в строке, например:

3 -> a 
1 -> b 
7 -> b 
2 -> c 

Один из способов сортировать эту карту по его значение. Но я боюсь, что это повлияет на эффективность find() (это правда?)

Другой выбор - использовать boost::bimap. Но, как вы могли заметить, значение в MyMap не уникально, поэтому бимап здесь не применим.

Есть ли хороший способ сделать это?

ответ

2

Я нашел решение использовать несколько значений в boost.bimap: multiset_of

Определение данных изменено на:

#include <boost/bimap/multiset_of.hpp> 
typedef boost::bimap<int, boost::bimaps::multiset_of<std::string> > MyMap; 

Теперь я могу пройти мои данные, либо ключ или значение.

+0

Если вы не хотите сортировать траверс, вы можете сделать его неупорядоченным, как 'typedef boost :: bimap , unordered_multiset_of > MyMap;' Это сделает поиск намного быстрее – balki

Смежные вопросы