看了自己写的前一篇,感觉不是很清晰,整理一下思路,重写如下:
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源码太难看,下一次看出来了再接着写吧。