/* * Comparison * */ template <class Key, class T, class Cmp = less<Key>, class A = allocator< pair<const Key,T> > > class map { public: // ... typedef Cmp key_compare; class value_compare : public binary_function<value_type,value_type,bool> { friend class map; protected: Cmp cmp; value_compare(Cmp c) : cmp(c) {} public: bool operator()(const value_type& x, const value_type& y) const { return cmp(x.first, y.first); } }; key_compare key_comp() const; value_compare value_comp() const; // ... }; /* * Usage of comparison * */ map<string,int> m1; map<string,int,Nocase> m2; // specify comparison type (_cont.comp_) map<string,int,String_cmp> m3; // specify comparison type (_cont.comp_) map<string,int,String_cmp> m4(String_cmp(literary)); // pass comparison object void f(map<string,int>& m) { map<string,int> mm; // compare using < by default map<string,int> mmm(m.key_comp()); // compare the way m does // ... }