2

マップがあるとしましょう:typedef map<int, string> MyMap;

たとえば、次のように文字列でトラバースしたいと思います。

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

1 つの方法は、このマップをその値でソートすることです。しかし、これは find() の効率に影響を与えるのではないかと心配しています (本当ですか?)

もう 1 つの選択肢は、 を使用することboost::bimapです。しかし、お気づきかもしれませんが、MyMap の値は一意ではないため、bimap はここでは適用できません。

それを行う良い方法はありますか?

4

1 に答える 1

2

boost.bimap で複数の値を使用する解決策を見つけました。multiset_of

データ定義は次のように変更されました。

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

これで、キーまたは値のいずれかでデータをトラバースできます。

于 2011-12-09T15:47:27.247 に答える