Skip to content

Instantly share code, notes, and snippets.

@tgrabiec
Created November 7, 2013 13:08
Show Gist options
  • Save tgrabiec/7354342 to your computer and use it in GitHub Desktop.
Save tgrabiec/7354342 to your computer and use it in GitHub Desktop.
#include <boost/intrusive/rbtree.hpp>
#include <boost/intrusive/set.hpp>
#include <iostream>
namespace bi = boost::intrusive;
struct s {
bi::set_member_hook<> hook;
int val;
s(int v) : val(v) {}
};
class cmp {
public:
bool operator()(const s& t1, const s& t2) const {
return t1.val < t2.val;
}
};
template<typename T>
void p(T& tree) {
for (auto e : tree) {
std::cout << e.val << ", ";
}
}
int main(int argc, char const *argv[])
{
bi::rbtree<s,
bi::member_hook<s, bi::set_member_hook<>, &s::hook>,
bi::compare<cmp>,
bi::constant_time_size<true>> tree;
s s1{1};
s s2{2};
s s3{3};
s s4{4};
s s5{5};
s s6{6};
tree.insert_equal(s1);
tree.insert_equal(s3);
tree.insert_equal(s2);
tree.insert_equal(s5);
tree.insert_equal(s4);
s s1_{2};
assert(&*tree.find(s1_) == &s2);
p(tree);
tree.clear();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment