Вопрос

Поэтому после того, как моя круговая проблема зависимости с BGL была решена, я пришел к другому препятствию.

В настоящее время я использую список солесов для моделирования моего графика. Включенные свойства для узлов и ребер применяются для хранения некоторой информации на графике. Поэтому у меня есть что-то подобное:

class Node {
    int x, int y // position
};
class Edge {
    float length;
};

boost::adjacency_list<boost::listS, boost::listS, boost::directedS, Node, Edge>

Проблема возникает, когда я хочу хранить ярлыки для определенных узлов и ребер где-то еще в моем коде (например, для улицы, которая имеет несколько полос). Мой первый подход должен был сохранить Edge_descriptors и vertex_descriptors, где они их нужны. Но мне интересно, насколько велика (с точки зрения байтов) таких дескрипторов. Возможно, есть лучшее решение, например, для хранения только доли информации, чтобы получить те же результаты.

Кто-нибудь знает сумму памяти, которая используется для вектора этого типа:

std::vector<edge_descriptor> ?

Я уже подумал просто хранить указатели на Edge_descriptors, но я не знаю, если и как это будет работать.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Редактировать: Теперь, когда мой первый вопрос был торосточко ответил, мне все еще интересно одно. Я хочу построить какой-то интерфейс для моего класса графика. Этот интерфейс должен отделить детали класса графика из других классов, которые не должны знать о деталях графика. Таким образом, другие классы предпочтительно распознают узлы и края в виде номеров. Так что я придумал две идеи:

  1. Я использую hash_map std::tr1::unordered_map<int, edge_descriptor> Чтобы иметь возможность переводить номера для дескрипторов, которые снова используются в качестве индексов к моему графику-объекту. Это может быть один шаг к большому количеству - возможно, расчет ценностей хэш займет слишком много времени, если будет достаточно узлов и краев, которые будут рассчитаны. Вот почему у меня была вторая идея.
  2. Сам граф должен преобразовать эти номера к краям и узлам. Я знаю, что внутренние свойства вместе с картами свойств могут быть использованы для реализации моей идеи. Затем вы можете получить доступ к узлу, просто набрав что-то вроде:
    boost::property_map<My_Graph, my_prop>::type index = get(my_prop(), G);

Но есть ли способ объединить такие карты недвижимости с моими подключенными свойствами?

Или у вас есть еще одна идея, которую я не ударил, пока?

Это было полезно?

Решение

Вершины и краевые дескрипторы принимают очень маленький размер.

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

Поэтому ответ на ваш вопрос заключается в том, что вы можете использовать их в векторах. Это не будет проблемой памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top