Двухсторонний ассоциативный контейнер
Я ищу тип данных (или, по крайней мере, правильное имя для него) или карту типа структуры данных, которая позволяет быстро искать в обоих направлениях.
что-то вроде:
class DoubleMap{
int getA(int b){
return b2a[b];
}
int getB(int a){
return a2b[a];
}
void insert(int a, int b){
a2b[a] = b;
b2a[b] = a;
}
std::map<int, int> a2b;
std::map<int, int> b2a;
};
конечно шаблонно и более изощренно.
Есть ли для него имя и какой-нибудь стандартный контейнер или что-то из Qt или boost?
1 ответ
Решение
Я предлагаю использовать boost::bimap
это предназначено для поиска по ключу или значению.
Так что в вашем случае вы можете просто сделать:
#include <boost/bimap.hpp>
typedef boost::bimap< int, int > bm_type;
bm_type doubleMap;
затем выполнить поиск по ключу:
doubleMap.left.find(key)
поиск по значению:
doubleMap.right.find(val)