Как запретить дублирование вершин в графе Boost? - PullRequest
1 голос
/ 16 марта 2019

Как запретить дублирование вершин в буст-графе?

using graph_t = boost::adjacency_list<boost::listS, boost::setS, boost::bidirectionalS>;

но я все еще вижу дубликаты узлов в моем графике. Не должно быть достаточно, чтобы setS для vertexList было достаточно?

void doGraph() {
      using graph_t =
         boost::adjacency_list<boost::setS, boost::setS, boost::directedS, std::string>;
      graph_t interference;
      add_vertex("m", interference);
      add_vertex("m", interference);
      // prints 2, why?
      std::cout << "vert #" << num_vertices(interference);
  }

1 Ответ

0 голосов
/ 18 марта 2019

Пакет свойств не является частью определения равенства для вершины. Дескриптор вершины есть, и они не совпадают:

  auto v1 = add_vertex("m", interference);
  auto v2 = add_vertex("m", interference);
  assert(v1 != v2);

Если вы хотите искать по имени, вам придется добавить индекс для него самостоятельно (используйте карту / bimap). Если вам просто нужны именованные вершины, рассмотрите возможность использования адаптера labeled_graph (https://www.boost.org/doc/libs/1_69_0/libs/graph/example/labeled_graph.cpp). К сожалению, этот адаптер не является частью документированной библиотеки. Я написал несколько ответов, которые используют его в прошлом.

...