Здравствуйте.
Вопрос к знатокам boost::bimap и, возможно, boost::graph.
коротко: как в boost::bimap хранить один из ключей как vector[от второго]?
длинно:
Необходимо привязать привязать переменную(unsigned int, уникальный идентификатор) к подмножеству вершин графа. Операции преобразования дескриптора вершины(unsigned int) в идентификатор и обратно должны работать за O(1). Для работы с графом использую библиотеку BGL.
Граф определен так: (код писал — не копировал: на возможные опечатки не обращать внимание)
typedef boost::adjacency_list<
boost::setS, // ребра
boost::vecS, // вершины
boost::bidirectionalS,
…
> Graph;
…
Graph graph;
Для привязки свойств к вершинам использую двунаправленный ассоциативный контейнер. (boost::bimap)
Стандартный вариант использования: (Graph::vertex_descriptor == unsigned int)
typedef boost::bimap<
boost::bimaps::unordered_map_of(Graph::vertex_descriptor), // дескриптор вершины
boost::bimaps::unordered_map_of(Graph::vertex_descriptor) // свойство — идентификатор в подмножестве
> Prop;
…
Prop prop;
В принципе работает, но меня коробит, что я переменную, которая последовательно принимает значения от 0 до N, храню в хеш-таблице.(prop.right)
Вопрос: как в boost::bimap хранить один из ключей как vector[от второго]? После тщательного рассматривания док-ии, я так понял, что никак

, т.к vector — это не «key-based set»: bimap хранит в нем пары (left key, right key).
т.е.
typedef boost::bimap<
boost::bimaps::unordered_map_of(Graph::vertex_descriptor), // дескриптор вершины
boost::bimaps::vector_of(Graph::vertex_descriptor) // свойство — идентификатор в подмножестве
> Prop;
…
Prop prop;
не катит: prop.right — вектор пар
ЗЫ:
Пока писал вопрос, придумал, что вообще говоря, конструкции unordered_set_of можно скормить свою хеш функцию, определенную таким образом, чтобы она возвращала сам ключ:
template
<
class KeyType,
class HashFunctor = hash< KeyType >,
class EqualKey = std::equal_to< KeyType >
>
struct unordered_set_of;
Насколько это правильный вариант?