I know this might be a dumb question. but I have a confusion. Wrt std :: map. I wrote my own predicate for dymanic ordering of the map,
enum OrderingType
{
ASCENDING,
DESCENDING
};
template <class T>
class Ordering
{
OrderingType m_order;
public:
Ordering(OrderingType order) : m_order(order) { }
bool operator() (const T &obj1, const T &obj2)
{
if( m_order == ASCENDING )
return obj1 < obj2;
if( m_order == DESCENDING )
return obj1 > obj2;
}
};
Advantage
We can decide the ordering of data elements on a map under certain conditions
Type OrderType = (condition? ASCENDING: DESCENDING); CUSTOMMAP m (type);
We can use the same formatting iterator for both the ascending and descending ordered maps
. , (amp1 map2). map2 = map1 map2 . , . map2 ( ) .
..? - ..?
typedef map<int, int, Ordering<int> > CUSTOMMAP;
typedef CUSTOMMAP::iterator CUSTOMMAP_ITER;
typedef CUSTOMMAP::const_iterator CUSTOMMAP_CONST_ITER;
ostream& operator <<(ostream& out, const CUSTOMMAP& mapobj)
{
CUSTOMMAP_CONST_ITER citer = mapobj.begin();
for( ; citer != mapobj.end(); ++citer )
{
out << citer->first << " " << citer->second << endl;
}
out << "==========" << endl;
return out;
}
int main()
{
CUSTOMMAP map1(ASCENDING);
CUSTOMMAP map2(DESCENDING);
map1.insert( make_pair(1, 0));
map1.insert( make_pair(2, 0));
cout << map1;
map2.insert( make_pair(5, 0));
map2.insert( make_pair(6, 0));
cout << map2;
map2 = map1;
cout << map2;
return 0;
}