#include <set> #include <algorithm> #include <iostream> template<class T> struct print : public std::unary_function<T, void> { print(std::ostream& out) : os(out) {} void operator() (T x) { os << x;} std::ostream& os; }; enum SortOrder { Increasing, Decreasing }; class fCompare { public: fCompare(const SortOrder& o) : m_order(o) {} bool operator() (const int a, const int b) const { if (m_order == Increasing) return a < b; else return b < a; } private: const SortOrder& m_order; }; int main() { SortOrder sort_state = Increasing; fCompare comp_obj(sort_state); std::set<int, fCompare> IntSet(comp_obj); for (int i = 0; i < 5; ++i) { IntSet.insert(i); } for_each(IntSet.begin(), IntSet.end(), print<int>(std::cout)); std::cout << std::endl; sort_state = Decreasing; for (int i = 0; i < 5; ++i) { IntSet.insert(i); } for_each(IntSet.begin(), IntSet.end(), print<int>(std::cout)); std::cout << std::endl; }