禁止自动排序的补充

看了自己写的前一篇,感觉不是很清晰,整理一下思路,重写如下:
1、禁止map自动排序
Map是一个标准的c++关联容器,存储在容器里面的数据可以通过键值索引,就像一个两列的数据库表一样。为了提高检索的效率,向map中增加数据时,map会对容器内的数据重新排序,一般是升序。Map有几个构造函数,可以指定用于排序的函数。
template <class Key,class Type,class Traits = less<Key>,class llocator=allocator<pair <const Key, Type> > >
class map
 
模板需要提供几个参数,第一个为键值的类型,第二个为数据的类型,第三个为用于比较两个键值大小的函数对象,或者是函数指针,默认值为小于算子。Map用第三个参数来对容器内的数据进行排序和索引,通过操作该算子,我们可以禁止map的自动排序功能。示例如下:
class MyComp
{
public:
        bool operator()(const char &c1,const char &c2) const
        {
                return true;
        }
};
 
typedef std::map<int,char,MyComp> INTMAP;
void Display(INTMAP &m)
{
        for(INTMAP::iterator it=m.begin();it!=m.end();it++)
        {
 
                cout<<(*it).first<<":"<<(*it).second<<endl;
        }
}
 
INTMAP m;
 
m[3]='e';
m[2]='b';
m[5]='c';
 
Display(m);  
//output :
3:e
2:b
5:c
 
从结果可以看出,通过定制排序函数,禁止了map的自动排序的功能
 
2、
上述代码在vc6上编译结果为
 
 
5:c
2:b
3:e
结果与.net下正好相反,要究其原因,当然是看一下源代码咯。STL源码太难看,下一次看出来了再接着写吧。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值