ฉันคิดว่ามีหลายสาเหตุที่ไม่มีต้นไม้ STL ต้นไม้ส่วนใหญ่เป็นรูปแบบของโครงสร้างข้อมูลแบบเรียกซ้ำซึ่งเช่นคอนเทนเนอร์ (รายการ, เวกเตอร์, ชุด) มีโครงสร้างที่แตกต่างกันมากซึ่งทำให้ตัวเลือกที่ถูกต้องหากิน พวกเขายังง่ายต่อการสร้างในรูปแบบพื้นฐานโดยใช้ STL
ต้นไม้รากที่มี จำกัด สามารถถูกมองว่าเป็นภาชนะที่มีค่าหรือน้ำหนักบรรทุกพูดถึงตัวอย่างของคลาส A และอาจเป็นที่ว่างเปล่าของต้นไม้ที่ถูกรูท (ย่อย); ต้นไม้ที่มีคอลเล็กชั่นย่อยที่ว่างเปล่าจะถูกมองว่าเป็นใบไม้
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
{};
เราต้องคิดเกี่ยวกับการออกแบบตัววนซ้ำและการดำเนินการผลิตภัณฑ์และผลิตภัณฑ์ร่วมช่วยให้สามารถกำหนดและมีประสิทธิภาพระหว่างต้นไม้ - และ STL ดั้งเดิมจะต้องถูกเขียนอย่างดี - เพื่อให้ชุดเซตเวกเตอร์หรือรายการว่างเปล่า ว่างเปล่าจริงๆของน้ำหนักบรรทุกใด ๆ ในกรณีเริ่มต้น
ต้นไม้มีบทบาทสำคัญในโครงสร้างทางคณิตศาสตร์จำนวนมาก (ดูเอกสารคลาสสิกของ Butcher, Grossman และ Larsen; นอกจากนี้เอกสารของ Connes และ Kriemer สำหรับตัวอย่างของพวกเขาสามารถเข้าร่วมและวิธีที่พวกเขาจะใช้ในการแจกแจง) มันไม่ถูกต้องที่จะคิดว่าบทบาทของพวกเขาเป็นเพียงเพื่ออำนวยความสะดวกในการดำเนินงานอื่น ๆ ค่อนข้างพวกเขาอำนวยความสะดวกในงานเหล่านั้นเพราะบทบาทพื้นฐานของพวกเขาเป็นโครงสร้างข้อมูล
อย่างไรก็ตามนอกเหนือจากต้นไม้แล้วยังมี "ต้นไม้ร่วม" ด้วย; ต้นไม้ด้านบนทั้งหมดมีคุณสมบัติที่ถ้าคุณลบรูทคุณจะลบทุกอย่าง
พิจารณาตัววนซ้ำบนต้นไม้บางทีพวกมันอาจถูกรู้ตัวว่าเป็นตัววนซ้ำอย่างง่าย ๆ ไปยังโหนดและกับผู้ปกครอง ... จนถึงราก
template<class TREE>
struct node_iterator : std::stack<TREE::iterator>{
operator*() {return *back();}
...};
อย่างไรก็ตามคุณสามารถมีได้มากเท่าที่คุณต้องการ พวกเขารวมกันเป็น "ต้นไม้" แต่ที่ลูกศรทั้งหมดไหลไปในทิศทางไปยังรากต้นไม้ร่วมนี้สามารถทำซ้ำผ่าน iterators ไปยัง iterator เล็กน้อยและราก; อย่างไรก็ตามมันไม่สามารถนำทางข้ามหรือข้าม (ไม่รู้ตัววนซ้ำอื่น ๆ ) และไม่สามารถลบชุดวนซ้ำทั้งหมดยกเว้นโดยการติดตามอินสแตนซ์ทั้งหมด
ต้นไม้มีประโยชน์อย่างไม่น่าเชื่อพวกมันมีโครงสร้างมากมายทำให้มันเป็นความท้าทายที่สำคัญในการหาวิธีที่ถูกต้องอย่างแน่นอน ในมุมมองของฉันนี่คือเหตุผลที่พวกเขาไม่ได้ดำเนินการใน STL ยิ่งไปกว่านั้นในอดีตฉันเคยเห็นผู้คนเคร่งศาสนาและค้นหาแนวคิดของภาชนะบรรจุที่บรรจุอินสแตนซ์ที่ท้าทายประเภทของตัวเอง - แต่พวกเขาต้องเผชิญกับมัน - นั่นคือสิ่งที่ประเภทต้นไม้แสดงถึง - เป็นโหนดที่บรรจุ อาจเป็นที่เก็บว่างเปล่าของต้นไม้ (เล็กกว่า) ภาษาปัจจุบันอนุญาตให้ใช้โดยไม่ต้องมีการกำหนดค่าเริ่มต้นสำหรับการcontainer<B>
จัดสรรพื้นที่บนฮีป (หรือที่อื่น) สำหรับการสร้างB
เป็นต้น
ฉันสำหรับหนึ่งจะยินดีถ้าสิ่งนี้ในรูปแบบที่ดีหาทางลงในมาตรฐาน