forked from boostorg/intrusive
Fixes for 1.41
[SVN r56823]
This commit is contained in:
74
example/doc_positional_insertion.cpp
Normal file
74
example/doc_positional_insertion.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2009-2009
|
||||
//
|
||||
// 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_positional_insertion
|
||||
#include <boost/intrusive/set.hpp>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
|
||||
using namespace boost::intrusive;
|
||||
|
||||
//A simple class with a set hook
|
||||
class MyClass : public set_base_hook<>
|
||||
{
|
||||
public:
|
||||
int int_;
|
||||
|
||||
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_; }
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
//Create some ORDERED elements
|
||||
std::vector<MyClass> values;
|
||||
for(int i = 0; i < 100; ++i) values.push_back(MyClass(i));
|
||||
|
||||
{ //Data is naturally ordered in the vector with the same criteria
|
||||
//as multiset's comparison predicate, so we can just push back
|
||||
//all elements, which is more efficient than normal insertion
|
||||
multiset<MyClass> mset;
|
||||
for(int i = 0; i < 100; ++i) mset.push_back(values[i]);
|
||||
|
||||
//Now check orderd invariant
|
||||
multiset<MyClass>::const_iterator next(mset.cbegin()), it(next++);
|
||||
for(int i = 0; i < 99; ++i, ++it, ++next) assert(*it < *next);
|
||||
}
|
||||
{ //Now the correct order for the set is the reverse order
|
||||
//so let's push front all elements
|
||||
multiset<MyClass, compare< std::greater<MyClass> > > mset;
|
||||
for(int i = 0; i < 100; ++i) mset.push_front(values[i]);
|
||||
|
||||
//Now check orderd invariant
|
||||
multiset<MyClass, compare< std::greater<MyClass> > >::
|
||||
const_iterator next(mset.cbegin()), it(next++);
|
||||
for(int i = 0; i < 99; ++i, ++it, ++next) assert(*it > *next);
|
||||
}
|
||||
{ //Now push the first and the last and insert the rest
|
||||
//before the last position using "insert_before"
|
||||
multiset<MyClass> mset;
|
||||
mset.insert_before(mset.begin(), values[0]);
|
||||
multiset<MyClass>::const_iterator pos =
|
||||
mset.insert_before(mset.end(), values[99]);
|
||||
for(int i = 1; i < 99; ++i) mset.insert_before(pos, values[i]);
|
||||
|
||||
//Now check orderd invariant
|
||||
multiset<MyClass>::const_iterator next(mset.cbegin()), it(next++);
|
||||
for(int i = 0; i < 99; ++i, ++it, ++next) assert(*it < *next);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
//]
|
||||
Reference in New Issue
Block a user