2017-09-01 27 views
0

如何獲得std::setstd::map的根節點?它提供了獲取begin()end()迭代器的功能,但是我沒有看到有關獲取根文件的任何內容。如何獲取二叉樹(set或map)的根?

+0

請編輯您的問題,解釋您爲什麼需要它。你可能不需要它。 –

回答

2

你不能那樣做。這就是爲什麼你提供了迭代器 - 將你自己從實現細節中抽象出來。而且,我剛剛在C++ Standard的「tree」關鍵字上完成了Ctrl + F,發現只有5次出現,其中沒有一次與set/map實現細節有關。

如果你需要二叉樹的根 - 創建你自己的數據結構。

+0

它比標準庫中的壞了多少? – Zebrafish

+0

@斑馬魚很多。你想要解決什麼問題? –

+0

給你發現的唯一函數是find()和lower_bound()。假設我在集合中有「獎」這個詞,並且我想要一個以「priz」開頭的單詞列表,使用lower_bound方法,我將下層迭代器作爲lower_bound(「priz」),將上層迭代器作爲「priza」,因爲我想要「priz」和「priza」之間的距離。如果我已經有了初始迭代器,我可以手動左右移動。我希望從根開始,但不要緊。 – Zebrafish

1

在這些Abstract Data Typessetmap都沒有)中沒有任何根節點的概念。它們實現爲red–black tree的事實僅僅是一個實現細節。

下面是支持的操作:

從維基百科頁面,約ADT的好處之一是:

封裝
抽象提供了一個承諾,即ADT的任何實現都具有某些特性和能力;知道這些是使用ADT對象所需的全部內容。用戶不需要關於實現如何使用ADT的技術知識。這樣,實現可能會很複雜,但實際使用時會被封裝在一個簡單的接口中。

看來你正試圖打破封裝,因爲知道太多的實施。