doc_avl_set.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 87 行

CPP
87
字号
///////////////////////////////////////////////////////////////////////////////// (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_avl_set_code#include <boost/intrusive/avl_set.hpp>#include <vector>#include <algorithm>#include <cassert>using namespace boost::intrusive;                  //This is a base hook optimized for sizeclass MyClass : public avl_set_base_hook<optimize_size<true> >{   int int_;   public:   //This is a member hook   avl_set_member_hook<> member_hook_;   MyClass(int i)      :  int_(i)      {}   friend bool operator< (const MyClass &a, const MyClass &b)      {  return a.int_ < b.int_;  }   friend bool operator> (const MyClass &a, const MyClass &b)      {  return a.int_ > b.int_;  }   friend bool operator== (const MyClass &a, const MyClass &b)      {  return a.int_ < b.int_;  }};//Define an avl_set using the base hook that will store values in reverse ordertypedef avl_set< MyClass, compare<std::greater<MyClass> > >     BaseSet;//Define an multiset using the member hooktypedef member_hook<MyClass, avl_set_member_hook<>, &MyClass::member_hook_> MemberOption;typedef avl_multiset< MyClass, MemberOption>   MemberMultiset;int main(){   typedef std::vector<MyClass>::iterator VectIt;   typedef std::vector<MyClass>::reverse_iterator VectRit;   //Create several MyClass objects, each one with a different value   std::vector<MyClass> values;   for(int i = 0; i < 100; ++i)  values.push_back(MyClass(i));   BaseSet baseset;   MemberMultiset membermultiset;      //Check that size optimization is activated in the base hook    assert(sizeof(avl_set_base_hook<optimize_size<true> >) == 3*sizeof(void*));   //Check that size optimization is deactivated in the member hook    assert(sizeof(avl_set_member_hook<>) > 3*sizeof(void*));   //Now insert them in the sets   for(VectIt it(values.begin()), itend(values.end()); it != itend; ++it){      baseset.insert(*it);      membermultiset.insert(*it);   }   //Now test avl_sets   {      BaseSet::reverse_iterator rbit(baseset.rbegin()), rbitend(baseset.rend());      MemberMultiset::iterator mit(membermultiset.begin()), mitend(membermultiset.end());      VectIt it(values.begin()), itend(values.end());      //Test the objects inserted in the base hook avl_set      for(; it != itend; ++it, ++rbit)         if(&*rbit != &*it)   return 1;      //Test the objects inserted in the member hook avl_set      for(it = values.begin(); it != itend; ++it, ++mit)         if(&*mit != &*it) return 1;   }   return 0;}//]

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?