บางทีนี่อาจเป็นคำถามโง่ ๆ แต่ฉันกำลังพยายามใช้ dijkstra_shortest_paths
ของ BGL และโดยเฉพาะอย่างยิ่งเพื่อใช้ฟิลด์ของคุณสมบัติที่รวม Edge ของฉันเป็นแผนที่น้ำหนัก ความพยายามของฉันทำให้เกิดข้อผิดพลาดของคอมไพเลอร์หลายสิบหน้า ดังนั้นฉันหวังว่าจะมีคนรู้ว่าจะช่วยฉันได้อย่างไร นี่คือลักษณะของรหัสของฉัน:
struct GraphEdge {
float length;
// other cruft
};
struct GraphVertex {
...
};
typedef boost::adjacency_list
<boost::vecS, boost::vecS, boost::directedS,
GraphVertex, GraphEdge> GraphType;
ฉันสามารถเติมกราฟได้โดยไม่มีปัญหาใดๆ แต่เมื่อถึงเวลาโทร dijkstra_shortest_paths
ฉันจะประสบปัญหา ฉันต้องการใช้ฟิลด์ length
โดยเฉพาะอย่างยิ่ง ฉันต้องการทราบว่าวูดูบูสต์ที่จำเป็นเล็กน้อยคืออะไรเพื่อให้เข้ากับการโทรเช่นนี้:
GraphType m_graph;
vector<int> predecessor(num_vertices(m_graph));
vector<float> distances(num_vertices(m_graph), 0.0f);
vector<int> vertex_index_map(num_vertices(m_graph));
for (size_t i=0; i<vertex_index_map.size(); ++i) {
vertex_index_map[i] = i;
}
dijkstra_shortest_paths(m_graph, vertex_from, predecessor, distances,
weightmap, vertex_index_map,
std::less<float>(), closed_plus<float>(),
(std::numeric_limits<float>::max)(), 0.0f,
default_dijkstra_visitor());
// How do I write the right version of weightmap here?
ดังนั้นแผนที่น้ำหนักจะเชื่อมโยงขอบกราฟของฉันกับฟิลด์ length
ที่เกี่ยวข้องในคุณสมบัติ ฉันแน่ใจว่ามีวิธีง่ายๆ ในการทำเช่นนี้ แต่เอกสารสำหรับ BGL นั้นคลุมเครือสำหรับฉันอย่างไม่น่าเชื่อ หากคุณสามารถบอกฉันได้ว่ามีการอธิบายตัวอย่างไว้ที่ใดในเอกสารประกอบ ฉันก็จะมีความสุขมากเช่นกัน
ขอบคุณล่วงหน้า!