doc_splay_algorithms.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 79 行
CPP
79 行
///////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2006-2007//// Distributed under the Boost Software License, Version 1.0.// (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/intrusive for documentation./////////////////////////////////////////////////////////////////////////////////[doc_splaytree_algorithms_code#include <boost/intrusive/splaytree_algorithms.hpp>#include <cassert>struct my_node{ my_node(int i = 0) : int_(i) {} my_node *parent_, *left_, *right_; int color_; //other members int int_;};//Define our own splaytree_node_traitsstruct my_splaytree_node_traits{ typedef my_node node; typedef my_node * node_ptr; typedef const my_node * const_node_ptr; static node_ptr get_parent(const_node_ptr n) { return n->parent_; } static void set_parent(node_ptr n, node_ptr parent){ n->parent_ = parent; } static node_ptr get_left(const_node_ptr n) { return n->left_; } static void set_left(node_ptr n, node_ptr left) { n->left_ = left; } static node_ptr get_right(const_node_ptr n) { return n->right_; } static void set_right(node_ptr n, node_ptr right) { n->right_ = right; } };struct node_ptr_compare{ bool operator()(my_node *a, my_node *b) { return a->int_ < b->int_; }};int main(){ typedef boost::intrusive::splaytree_algorithms<my_splaytree_node_traits> algo; my_node header, two(2), three(3); //Create an empty splaytree container: //"header" will be the header node of the tree algo::init_header(&header); //Now insert node "two" in the tree using the sorting functor algo::insert_equal_upper_bound(&header, &two, node_ptr_compare()); //Now insert node "three" in the tree using the sorting functor algo::insert_equal_lower_bound(&header, &three, node_ptr_compare()); //Now take the first node (the left node of the header) my_node *n = header.left_; assert(n == &two); //Now go to the next node n = algo::next_node(n); assert(n == &three); //Erase a node just using a pointer to it algo::unlink(&two); //Erase a node using also the header (faster) algo::erase(&header, &three); return 0;}//]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?