我知道这可能是一个愚蠢的问题.但我很困惑.Wrt std :: 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;
}
};
Run Code Online (Sandbox Code Playgroud)
优点是
在某些条件下,我们可以决定地图中数据元素的顺序
OrderType type =(condition?ASCENDING:DESCENDING); CUSTOMMAP m(类型);
我们可以使用相同的前向迭代器来升序和降序有序映射
在下面的代码中.map的排序在升序和降序(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 …Run Code Online (Sandbox Code Playgroud) c++ ×1