make_heapのためにどの演算子をオーバーロードする必要がありますか?それは()演算子ですか?私のアルゴリズムで既に別のケースに定義されている場合私の場合は誰でもmake_heapを使う正しい方法を提供できますか?より理解するために、以下のコードをご覧ください。私のアルゴリズムで今make_heap関数オブジェクトを使用
vertex_iterator GraphComponents::graph::find_vertex_by_key(int key)
{
return std::find_if(_vertices.begin(), _vertices.end(), GraphComponents::vertex(key));
}
find_if次のstd方法でグラフを構築しながら、私は
bool operator() (vertex &v) const
{
return (v.key() == _key);
}
これは私がFunctionオブジェクトとして頂点を使用する使用されてきた頂点クラス内
別の状況下でここで
std::list<int> GraphComponents::graph::breadth_first_search (int key, int start_key)
{
std::vector<GraphComponents::vertex *> heap;
for (vertex_iterator copy_iter = _vertices.begin(); copy_iter != _vertices.end(); ++copy_iter) {
heap.push_back(&(*copy_iter));
}
std::make_heap(heap.begin(), heap.end(), vertex(<should be distance>));
}
私は比較して、キーを使用する必要はありませんが、私は最短距離を持つ頂点がヒープの一番上にあるので、距離のメンバーを使用します。自分のヒープを実装するのが短く、これを回避するにはどうすればよいでしょうか?
を私はオペレータを試してみました<私は、デバッガを通してそれを実行したときに、それが呼び出されることはありませんでした。 2つの頂点を持つ述語を呼び出すにはどうすればよいですか?サンプルコードが役に立ちます。 STLのこの部分は私にとって初めてのことです。 –
大変ありがとうございました。+1 –
@MatthewHogganはちょうど同じ問題に遭遇しました。 CompareByDistanceを最後の引数としてすべてのmake_heap、push_heap、およびpop_heap関数に渡します。 – burkay