вставка в бимап буста с отношением многие ко многим - PullRequest
2 голосов
/ 03 января 2012

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

Каждый пост и тег могут быть однозначно идентифицированы по ключу (скажем, int).

Я хочу иметь возможность эффективно получать все теги для данного сообщения и все сообщения данного тега.

Я хочу перейти от кода, который выглядит следующим образом:

unordered_map<int, vector<int> > post_to_tags;
unordered_map<int, vector<int> > tags_to_post;

до boost::bimap. Я пробовал это:

typedef bimap<
    unordered_multiset_of<int>,
    unordered_multiset_of<int>,
    unconstrained_set_of_relation
> BimapType;

BimapType bm;

Без unconstrained_set_of_relation bimap позволит вставлять одну и ту же пару (post, tag) более одного раза (поскольку для отношения используется мультимножество) С unconstrained_set_of_relation я не могу понять, как вставить элементы в этот контейнер (вставка не определена).

  1. Может ли boost::bimap описать это отношение вообще?
  2. Как можно выполнить вставку?
  3. Является ли Boost.MultiIndex лучшим выбором (проще / эффективнее) для этого случая?
...