Двухсторонний ассоциативный контейнер

Я ищу тип данных (или, по крайней мере, правильное имя для него) или карту типа структуры данных, которая позволяет быстро искать в обоих направлениях.

что-то вроде:

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)
Другие вопросы по тегам