ポインターの代わりに反復子を使用する C++ でツリー データ構造を作成するにはどうすればよいですか? これを行うことができるSTLには何も見つかりませんでした。私がやりたいことは、次のようなツリーを作成および操作できるようにすることです。
#include <iostream>
#include <tree>
using namespace std;
int main()
{
tree<int> myTree;
tree<int>::iterator i = myTree.root();
*i = 42;
tree<int>::iterator j = i.add_child();
*j = 777;
j = j.parent();
if (i == myTree.root() && i == j) cout << "i and j are both pointing to the root\n";
return 0;
}
ありがとう、tree.hh はまさに私が探していたもののようです。
これが、任意のインデックス タイプを保持し、検索用に最適化され、挿入が得意なデータ構造の利点を得る場合は、マップの使用を検討してください。
マップは、対数検索、対数挿入、対数削除、線形空間など、ツリーと同じパフォーマンス保証を持つ連想コンテナーです。内部的には、赤黒木として実装されることがよくありますが、それは保証ではありません。それでも、STL ユーザーとして気にする必要があるのは、STL アルゴリズムとデータ構造のパフォーマンス保証だけです。それらがツリーとして実装されているか、小さな緑の男性として実装されているかは問題ではありません。
地図が必要かどうかわかりませんが、情報をありがとうございます。ツリーを実装する代わりに、可能な限りマップを使用することを忘れないでください。