#include #include namespace bi = boost::intrusive; struct A : public bi::set_base_hook<> { int _val; int _extra; A(int val = 0, int extra = 0) : _val(val), _extra(extra) {} friend std::ostream& operator << (std::ostream& os, const A& rhs) { os << "(val=" << rhs._val << ", extra=" << rhs._extra << ")"; return os; } friend bool operator < (const A& lhs, const A& rhs) { return lhs._val < rhs._val; } }; template < typename Cont > std::ostream& print_cont(std::ostream& os, const Cont& l) { bool first = true; for (const auto& e : l) { if (not first) { os << ", "; } os << e; first = false; } return os; } int main() { std::vector< A > v = { {2, 5}, {2, 7} }; bi::multiset< A > s; s.insert(v[0]); s.insert(v[1]); std::cout << "s: size=" << s.size() << ", elems={"; print_cont(std::cout, s); std::cout << "}\n"; s.erase(v[0]); std::cout << "s: size=" << s.size() << ", elems={"; print_cont(std::cout, s); std::cout << "}\n"; }