Поиск общих ребер в двух путях в Графике усиления - PullRequest
2 голосов
/ 03 февраля 2020

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

У меня есть направленный мультиграф, реализованный в виде повышения adjacency_matrix. Я определил пользовательские ребра и вершинные структуры вдоль этих линий, добавив еще несколько записей:

struct Vertex
{
    int id;
    std::pair <double, double> coords;
};

struct Edge
{
    double distance;
    double cost;
    std::string name;
};

Затем график строится из информации, считанной из CSV, содержащей координаты станций и расстояния, полученные из графоппера. Я определяю график, как показано в документации adjacency_matrix, используя мои структуры вершин и ребер

typedef boost::adjacency_matrix<boost::directedS, Vertex, Edge> Graph;

Проблема: у меня есть std :: векторы объектов ребер, соответствующих циклам в графе. Я хотел бы вычислить пересечение двух циклов как набор ребер.

Изначально я хотел использовать set_intersection, но для этого мне пришлось бы писать компараторы для моих краевых объектов. Я понял, что выполнение этого, вероятно, будет дублировать функциональность уже в Boost. Я просмотрел документацию, но не нашел очевидного ответа.

В настоящее время я думаю о том, чтобы определить карту свойств для ребер и получить индексы ребер, затем сравнить их, затем перевести индексы обратно в ребра и добавить их в unsorted_set, что кажется плохим решением и кажется как будто есть лучший способ. Любые идеи будут оценены, спасибо!

...