我正在實施A*
最短路徑算法。 Openlist部分存儲將要訪問的所有節點。該列表就像一個優先級隊列,第一個元素具有最小的成本值,因此在每次迭代中,我們只需彈出第一個元素並訪問它。但是在迭代中,我們需要遍歷這個節點的鄰居,並檢查鄰居是否在Openlist中。C++設置如何按值排序集和按鍵搜索
因此,這意味着這Openlist需要支持兩種操作:
- 自動分揀
- 查找一個節點(通過其ID)
這裏的問題是,Openlist會按成本值排序,而查找需要基於鄰居節點(相鄰節點)的ID。所以我正在考慮使用set,其中的元素是節點。但是我不知道如何通過它在這個集合中的ID來查找元素。
struct astar_node
{
string id;
double f; //estimated cost;
double g; //distance from source to this node;
double h; //heuristic cost from this node to target;
};
struct openlist_compare
{
bool operator()(const astar_node &node1, const astar_node &node2){
return node1.f < node2.f ;
}
};
std::set<astar_node, openlist_compare> Openlist;
保留兩個集合,一個用'f'索引,另一個用'id'索引。 –
你不會在一個集合中通過它的ID來查找元素 - 至少不是遍歷整個集合。這不是什麼套。 – immibis
@但find的set()方法做什麼? – daydayup