Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在恒定时间内从boost图中获取顶点?_C++_Boost_Boost Graph - Fatal编程技术网

C++ 如何在恒定时间内从boost图中获取顶点?

C++ 如何在恒定时间内从boost图中获取顶点?,c++,boost,boost-graph,C++,Boost,Boost Graph,我试图创建一个图,其中车道表示顶点和边之间的连接。我们的想法是稍后使用a_star算法遍历图形并找到最佳路径 我的问题是如何通过使用(城镇id、道路id、车道id)来获取顶点(描述符?)? 我试着用boost附带的示例进行斗争,但基本上失败了。在它们中,它们总是遍历所有顶点,然后得到顶点描述符,但我想在恒定的时间内这样做。 所需要的是类似于boost::get_vertex(std::tuple(1,2,3),graph) 我的情况在代码中标记为PROBLEMbellow。下面的代码是编译的,因

我试图创建一个图,其中车道表示顶点和边之间的连接。我们的想法是稍后使用
a_star
算法遍历图形并找到最佳路径

我的问题是如何通过使用
(城镇id、道路id、车道id)来获取顶点(描述符?)
? 我试着用boost附带的示例进行斗争,但基本上失败了。在它们中,它们总是遍历所有顶点,然后得到
顶点描述符
,但我想在恒定的时间内这样做。 所需要的是类似于
boost::get_vertex(std::tuple(1,2,3),graph)

我的情况在代码中标记为
PROBLEM
bellow。下面的代码是编译的,因为我猜有12个对应于
boost::vecS
中的索引,但我想使用一个元组(或其他可以容纳三元组的东西),它可以将顶点描述符作为我的起始位置

使用TRL=std::tuple;
结构TRL\U VProp{
///出于某种原因,此对象必须是默认可构造的
///使用无效数据将其标记为无效
TRL_VProp()
:trl(-1,-1,0){}
TRL_VProp(TRL TRL)
:trl(trl){}
TRL_VProp(内部城镇id、内部道路id、内部车道id)
:trl(城镇id、道路id、车道id){}
TRL-TRL;
};

使用DirectedGraph=boost::邻接列表;
使用Vertex=boost::graph\u traits::Vertex\u描述符;
使用VertexI=boost::graph\u traits::vertex\u迭代器;
使用EdgeI=boost::graph\u traits::edge\u迭代器;
使用Edge=boost::graph\u traits::Edge\u描述符;
使用AdjI=boost::graph\u traits::adjacence\u迭代器;
使用Route=std:vector;
路线构建路线(地图和地图){
路线结果;
有向图;
常量boost::属性映射::类型trl=
boost::get(&TRL\u VProp::rsl,图形);
bool被插入;
边缘描述;
for(汽车和城镇:map.GetTowns()){
用于(汽车和道路:town.GetRoads()){
用于(自动车道和车道:road.GetLanes()){
自动vtx_1=boost::添加顶点(
RSL_VProp(town.GetId()、road.GetId()、lane.GetId()),
图表);
const auto next_lanes=map.GetNextLanes(town.GetId(),road.GetId(),lane.GetId());
用于(连续自动和下一条车道:下一条车道){
自动vtx_2=boost::添加顶点(
TRL_VProp(lane.getdown().GetId(),lane.GetRoad().GetId(),lane.GetId()),
图表);
std::tie(e_desc,is_inserted)=boost::add_edge(vtx_1,vtx_2,图形);
断言(已插入);
}
}
}
}
//调试部分
TRL temp_TRL;

std::pair adj_i=boost::相邻_顶点(12,图);//为什么您希望能够在恒定时间内遍历图并找到任意节点?想想看;如果您的“搜索节点”是根节点,查找它显然比查找任何其他节点都要快。在固定时间内找不到任何节点。您必须遍历图形,时间会根据需要搜索的节点数而变化。因此,基本上我应该手动创建一个
无序的\u映射
,并从中获取顶点描述符?但这一切听起来还是很疯狂。因此,如果有人想找到两个顶点之间的最短距离
(v1,v2)
,他必须遍历所有顶点以找到他要查找的顶点,然后将它们传递给算法?