template <class _A, class _B, class _Compare=less<_A> >
class MMap : public set < pair< _A, _B >, _Compare >
{
        public :
                MMap():set< pair< _A, _B >, _Compare >(){};
                ~MMap(){};
};

template< typename InPair >
struct MMapComp{
        bool operator() (InPair a , InPair b){
                if( a.first == b.first ) return a.second > b.second;
                else
                        return a.first < b.first;
        }
};

struct COMP_
{
    bool operator()(pair<string,int> pa,pair<string,int> pb)
    {
        if(pa.first == pb.first)
            return pa.second > pb.second ;
        return pa.first < pb.first ;
    }
};
int main(int argc, char ** argv)
{
    MMap<char,int,MMapComp< pair<char , int > > > test;

    test.insert(make_pair('A',3));
    test.insert(make_pair('D',1));
    test.insert(make_pair('D',2));
    test.insert(make_pair('B',3));
    test.insert(make_pair('A',4));
    test.insert(make_pair('A',5));

    for( MMap<char,int >::iterator it = test.begin(); it != test.end(); it++ )
        cout << (*it).first << "\t" << (*it).second << endl;
    cout << "=========================" << endl ;
    set< pair<string,int>,COMP_ > xs ;
    xs.insert(make_pair("A",3));
    xs.insert(make_pair("D",1));
    xs.insert(make_pair("D",2));
    xs.insert(make_pair("B",3));
    xs.insert(make_pair("A",4));
    xs.insert(make_pair("A",5));
    for( auto it = xs.begin(); it != xs.end(); it++ )
        cout << (*it).first << "\t" << (*it).second << endl;
}

http://www.cplusplus.com/articles/oE3hAqkS/

A    5
A    4
A    3
B    3
D    2
D    1
=========================
A    5
A    4
A    3
B    3
D    2
D    1

創作者介紹
創作者 hedgezzz 的頭像
hedgezzz

hedgezzz的部落格

hedgezzz 發表在 痞客邦 留言(0) 人氣()