Я пишу приложение, которое анализирует структуру данных с чем-то вроде
struct Block
{
std::string foo;
/* ... even more local data ... */
};
std::map<std::string, Block> blockContainer; // Each Block will have a name here
struct Signal
{
// the direct links to the Blocks, no redundant storage of the name so that an
// simple renaming of a Block would be possible
std::map<std::string, Block>::iterator from;
std::map<std::string, Block>::iterator to;
std::string bar;
/* ... even more local data ... */
};
std::vector<Signal> signalContainer;
разобрать и заполнить этот список было довольно легко. Теперь мне нужно сделать топологическую сортировку Блоков в зависимости от Сигналов — тоже довольно просто, когда я использую Boost::Graph
.
Но сначала анализировать его в структуре данных STL, а затем копировать их в структуру Boost::Graph, для меня не имеет особого смысла. Тем более, что все, что впоследствии будет сделано с этими данными, — это, возможно, несколько простых модификаций (добавление/удаление блоков и сигналов, некоторое перенаправление сигналов, их повторная сериализация) с последующей новой топологической сортировкой.
Так что я был бы в порядке с любым из этих возможных решений:
- Заставить Boost::Graph напрямую работать с моими контейнерами
- Анализируйте данные непосредственно в структурах данных Boost::Graph (и, например, используйте граф со связанными свойствами, такими как
boost::adjacency_list<boost::mapS, boost::vecS, boost::directedS, Block, Signal>
)
Но, похоже, я недостаточно умен, чтобы понять документацию здесь, чтобы сделать то же самое. Кроме того, все примеры, которые я нашел в сети, показывали, как использовать связанные свойства, но не показывали, как построить график с ними на лету. (И, конечно же, не со свойствами узла и вершины одновременно, или как использовать std::map
для доступа к узлам по их имени,...)
Кто-нибудь может мне помочь?
Спасибо!