Finden Sie Boost BGL-vertex durch einen Schlüssel
Ich bin auf der Suche nach einem Weg, um Zugang vertex-Eigenschaften mit einem Schlüssel anstelle von vertex-Referenz selbst.
Zum Beispiel, wenn ich
class Data
{
public:
std::string name;
unsigned int value;
};
typedef boost::adjacency_list< boost::vecS, boost::vecS, boost::directedS, Data > Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
anstatt
Vertex vertex1 = boost::add_vertex( g );
g[vertex1].name = "Alpha";
g[vertex1].value = 10;
Ich würde gerne
g["Alpha"].name = "Alpha";
g["Alpha"].value = 10;
Macht ein fertig Mechanismus existieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, ich fand einen solchen Mechanismus. Es heißt labeled_graph und ist ein Teil der BGL.
Anstelle der Verwendung von adjacency_list, kann man verwenden, um eine vordefinierte wrapper - labeled_graph:
Nach der Definition eines Graphen, wie diesem, ist es möglich, auf die vertices auf die folgende Weise:
Der Nebeneffekt ist, dass man verwenden müssen, graph () - member-Funktion, um einige algorithmen arbeiten:
Aus irgendeinem Grund, labeled_graph ist nicht beschrieben in der BGL-Dokumentation, aber es wird in der Beispiel-Ordner.
Danke für die Antwort,
Serge
Einer fertigen Mechanismus nicht vorhanden, da der
adjacency_list
Konzept nicht wissen, die Sie wollen Zugriff auf Ihre vertex-Eigenschaft mit einem Feld in eine Struktur.Würde ich lieber den Weg, dass eine zusätzliche Karte, die Karten die Namen der Daten zu den entsprechenden Scheitelpunkt. Zudem können Sie die Kapseln Ihren Algorithmus in einer Klasse oder einer Funktion, so dass beim hinzufügen eines neuen vertex der Karte wird automatisch ausgefüllt.