iterator begin();
const_iterator begin() const;
const_iterator cbegin() const;
這是有點不清楚,基於文檔,但它看起來像begin()將返回第一個頭節點(又名根節點)。
http://www.dcs.gla.ac.uk/~samm/trees.html
更新
#include <iostream>
#include <algorithm>
#include <boost/intrusive/rbtree.hpp>
using namespace boost::intrusive;
struct X : public set_base_hook<optimize_size<true> > {
X(int x) : _x{x} { }
int _x;
friend inline std::ostream& operator<<(std::ostream&, const X&);
friend bool operator<(const X&, const X&);
friend bool operator>(const X&, const X&);
friend bool operator==(const X&, const X&);
};
std::ostream& operator<<(std::ostream& os, const X& x) {
os << x._x;
return os;
}
bool operator<(const X& lhs, const X& rhs) { return lhs._x < rhs._x; }
bool operator>(const X& lhs, const X& rhs) { return lhs._x > rhs._x; }
bool operator==(const X& lhs, const X& rhs) { return lhs._x == rhs._x; }
int main()
{
typedef rbtree<X> tree_t;
tree_t tree;
X x0(0);
X x1(1);
X x2(2);
/*! Output is the same for the following
* X x1(1);
* X x0(0);
* X x2(2);
*/
tree.insert_unique(x1);
tree.insert_unique(x0);
tree.insert_unique(x2);
std::for_each(
tree.begin(), tree.end(),
[](const X& xx) { std::cout << "x: " << xx << std::endl; });
}
輸出
X:0 X:1 X:2
我注意到push_back/push_front不會調用樹重新排序。也許我錯過了文檔。
它似乎並不像它。調用'begin()'似乎返回第一個元素,由比較函數決定。 –
感謝您的回覆,但仍然需要頂層(root/header)節點,而不是最左邊/最右邊的節點。 –