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>>
.