3 回答

TA貢獻1884條經驗 獲得超4個贊
您可能要使用樹有兩個原因:
您想使用樹狀結構來反映問題:
為此,我們有增強圖形庫
或者您想要一個具有樹狀訪問特征的容器,為此,我們有
std::map(和std::multimap)
std::set(和std::multiset)
基本上,這兩個容器的特性使得它們實際上必須使用樹來實現(盡管這實際上不是必需的)。

TA貢獻1788條經驗 獲得超4個贊
可能出于同樣的原因,boost中沒有樹容器。有很多方法可以實現這樣的容器,并且沒有令人滿意的方法來滿足使用它的每個人。
需要考慮的一些問題:
-節點的子代數目是固定的還是可變的?
-每個節點多少開銷?-例如,您是否需要父指針,兄弟指針等?
-提供哪些算法?-不同的迭代器,搜索算法等
最后,問題最終出在一個樹形容器上,它對每個人都足夠有用,而且重量太大,無法滿足大多數使用它的人的需求。如果您正在尋找功能強大的東西,Boost Graph Library本質上是樹庫可用于什么的超集。

TA貢獻1878條經驗 獲得超4個贊
STL的理念是,您根據保證而不是根據容器的實現方式來選擇容器。例如,您對容器的選擇可能基于對快速查找的需求。盡您所能,容器可以實現為單向列表-只要搜索非常快,您就會感到滿意。那是因為您無論如何都沒有接觸內部,而是使用迭代器或成員函數進行訪問。您的代碼并不局限于容器的實現方式,而是取決于它的運行速度,它是否具有固定的和已定義的順序,或者在空間上是否有效等等。
- 3 回答
- 0 關注
- 1245 瀏覽
添加回答
舉報