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

#boost #boost-graph

#повышение #boost-graph

Вопрос:

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

 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:

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

   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 ). К сожалению, этот адаптер не является частью документированной библиотеки. Я написал несколько ответов, в которых это использовалось в прошлом.