Boost包含两个库来处理这个问题:
Boost.Bimap 和
Boost.MultiIndex。前者专门用于双射("双向")映射的问题,而后者更通用,实现了类似于带有任意索引的内存数据库。
考虑到你的
unsigned int
键不唯一地映射到你的键值对,我认为MultiIndex更合适。我很久以前用过这个库,但看了教程后,你需要像这样的东西。
struct YourData {
unsigned key;
std::pair<unsigned, unsigned> value;
};
typedef multi_index_container<
YourData,
indexed_by<
ordered_non_unique<member<YourData, unsigned, &YourData::key> >,
ordered_unique<member<YourData, std::pair<unsigned, unsigned>,
&YourData::value> >
>
> YourContainer;
如果您不想使用Boost,那么您可以通过替换“
”来简化当前设置。
map<unsigned int, vector<pair<unsigned int, unsigned int> > >
由一个std::multimap<unsigned, std::pair<unsigned, unsigned>>
实现。