Saya pikir ada beberapa alasan mengapa tidak ada pohon STL. Terutama Pohon adalah bentuk struktur data rekursif yang, seperti wadah (daftar, vektor, set), memiliki struktur halus yang sangat berbeda yang membuat pilihan yang benar rumit. Mereka juga sangat mudah dibangun dalam bentuk dasar menggunakan STL.
Pohon berakar terbatas dapat dianggap sebagai sebuah wadah yang memiliki nilai atau muatan, katakan sebuah instance dari kelas A dan, koleksi pohon (sub) yang mungkin kosong; pohon dengan koleksi sub pohon yang kosong dianggap sebagai daun.
template<class A>
struct unordered_tree : std::set<unordered_tree>, A
{};
template<class A>
struct b_tree : std::vector<b_tree>, A
{};
template<class A>
struct planar_tree : std::list<planar_tree>, A
{};
Kita harus berpikir sedikit tentang desain iterator dll. Dan operasi produk dan produk samping mana yang memungkinkan untuk mendefinisikan dan menjadi efisien di antara pohon - dan STL asli harus ditulis dengan baik - sehingga set kosong, vektor atau daftar kontainer adalah benar-benar kosong dari muatan apa pun dalam kasus default.
Pohon memainkan peran penting dalam banyak struktur matematika (lihat makalah klasik dari Jagal, Grossman dan Larsen; juga makalah Connes dan Kriemer untuk contoh mereka dapat bergabung, dan bagaimana mereka digunakan untuk menghitung). Tidaklah benar untuk berpikir bahwa peran mereka hanya untuk memfasilitasi operasi-operasi tertentu lainnya. Sebaliknya mereka memfasilitasi tugas-tugas itu karena peran mendasar mereka sebagai struktur data.
Namun, selain pohon ada juga "co-tree"; pohon di atas semua memiliki properti yang jika Anda menghapus root Anda menghapus semuanya.
Pertimbangkan iterator di pohon, mungkin mereka akan direalisasikan sebagai setumpuk iterator sederhana, ke sebuah simpul, dan ke induknya, ... hingga ke akar.
template<class TREE>
struct node_iterator : std::stack<TREE::iterator>{
operator*() {return *back();}
...};
Namun, Anda dapat memiliki sebanyak yang Anda suka; secara kolektif mereka membentuk "pohon" tetapi di mana semua panah mengalir ke arah root, co-tree ini dapat diiterasi melalui iterator menuju iterator dan root yang sepele; namun tidak dapat dinavigasi melintasi atau ke bawah (iterator lain tidak diketahui) atau ensemble iterator tidak dapat dihapus kecuali dengan melacak semua instance.
Pohon sangat berguna, mereka memiliki banyak struktur, ini membuatnya menjadi tantangan serius untuk mendapatkan pendekatan yang benar benar. Dalam pandangan saya ini adalah mengapa mereka tidak diterapkan di STL Selain itu, di masa lalu, saya telah melihat orang-orang menjadi religius dan menemukan ide tentang jenis wadah berisi contoh dari jenisnya sendiri menantang - tetapi mereka harus menghadapinya - itulah yang diwakili oleh jenis pohon - itu adalah simpul yang mengandung mungkin koleksi kosong pohon (lebih kecil). Bahasa saat ini memungkinkan tanpa tantangan menyediakan konstruktor default untuk container<B>
tidak mengalokasikan ruang pada heap (atau tempat lain) untuk B
, dll.
Untuk satu orang akan senang jika ini, dalam bentuk yang baik, menemukan jalan ke standar.