#include #include #include using namespace boost::intrusive; class MyClass : public set_base_hook<> { public: int first; explicit MyClass(int i) : first(i){} struct Compr { bool operator() (const int l, const int r) const { return l < r; } bool operator() (const int l, const MyClass & r) const { return l < r.first; } bool operator() (const MyClass & l, const int r) const { return l.first < r; } bool operator() (const MyClass & l, const MyClass & r) const { return l.first < r.first; } }; }; typedef set< MyClass, compare > OrderedMap; int main() { std::vector values; for(int i = 0; i < 100; ++i) values.push_back(MyClass(i)); OrderedMap omap(values.begin() + 50, values.end()); OrderedMap::insert_commit_data commitData; for (int i = 0; i < 100; ++i) { auto r = omap.insert_check(i, omap.value_comp(), commitData); if (r.second == true) { omap.insert_commit(values[i], commitData); std::cout << "inserted" << std::endl; } else { std::cout << "not inserted" << std::endl; } } std::cout << omap.size() << std::endl; return 0; }