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
留言列表