Absurd » 21 мар 2018, 22:10
Я делаю такие структуры как и в СУБД. В вашем случае, наверное, будет так:
1) таблица узлов с первичным ключом. В С++ обычно используют адрес объекта в оперативной памяти, он гарантированно уникален ( std::unordered_set<Node*> ).
2) таблица ребро->вес, у нее ключ составной в виде кортежа из двух узлов (std::unordered_map< std::tuple<Node*, Node*>, int, Comparer(..), Hasher()> );. Так же надо определить компаратор и хэшер для кортежа std::tuple<Node*, Node*>
3) Таблица узел А -> узел Б, где на каждый A допускается несколько Б, в ней первичного ключа нет и поэтому надо использовать мультимап: std::unordered_multimap<Node*, Node*>.
Я делаю такие структуры как и в СУБД. В вашем случае, наверное, будет так:
1) таблица узлов с первичным ключом. В С++ обычно используют адрес объекта в оперативной памяти, он гарантированно уникален ( std::unordered_set<Node*> ).
2) таблица ребро->вес, у нее ключ составной в виде кортежа из двух узлов (std::unordered_map< std::tuple<Node*, Node*>, int, Comparer(..), Hasher()> );. Так же надо определить компаратор и хэшер для кортежа std::tuple<Node*, Node*>
3) Таблица узел А -> узел Б, где на каждый A допускается несколько Б, в ней первичного ключа нет и поэтому надо использовать мультимап: std::unordered_multimap<Node*, Node*>.