自定义Map容器 comparator
来源:互联网 发布:java截取字符串 编辑:程序博客网 时间:2024/06/04 01:17
因为STL map内部使用的是红黑树.
map默认的比较器有Less,Greater等等,在查找一个值时,不能立刻找到与该元素值相等的元素,而是要遍历到树的叶节点,记录不小于(不大于)该值的元素,最后再做一次比较确定是否相等.
因为我们可以自定义比较器,比如string的比较,CEGUI中就用
stringFastLess<T>的仿函数(Functor),先比较字符串的长度,长度相同时再比较内容.因为长度是不需要实时计算的,所以这样大大提高了比较的速度.它的缺点是,插入顺序和比较顺序不是字典顺序.当然,最坏的情况下,所有字符串长度相等时.......
其实,一次字符串比较之后,大于,小于或者等于,结果已经完全出来了,自己写了一个map,而它默认比较器是这样:
- template<T>struct mapComparator
- {
- int operator()(const T& lhs,const T& rhs) const
- {
- if( lhs < rhs ) return -1;
- else if( lhs > rhs ) return 1;
- else return 0;
- }
- }
这个是通用的,效率很低,每个节点都要比较两次.但是对于字符串:
- struct stringComparator
- {
- int operator()(const string& lhs,const string& rhs) const
- {
- return strcmp(lhs.c_str(),rhs.c_str() );
- }
- }
甚至对于整数:
- struct intComparator
- {
- int operator()(const int& lhs, const int& rhs) const
- {
- return lhs -rhs;
- }
- }
呵呵,这样就可以就地找到匹配的值,而不需要遍历到叶子节点了.
- 自定义Map容器 comparator
- 【原创】map容器自定义排序
- 自定义comparator
- map和set容器自定义比较函数
- Comparator对Map排序!
- Map with comparator(functor)
- Comparator自定义对比
- TreeMap使用自定义Comparator
- hbase filter 自定义Comparator
- Comparator的自定义排序
- Java中容器[Collection(List,Set,Queue),Map],迭代器(Iterator)和比较器(Comparator)及列表排序
- 容器第六课,自定义Map的功能,底层源码
- Map容器
- map容器
- map容器
- map容器
- map容器
- map容器
- C struct 中字节对齐问题
- 最全的CSS浏览器兼容问题整理(IE6.0、IE7.0 与 FireFox) 转
- TLB
- 微软的ie和sun的jdk冲突,网页一片空白
- jbpm 3.2.2 + tomcat + mysql 安装配置总结
- 自定义Map容器 comparator
- 回调机制
- 页面传值
- 实战DeviceIoControl 之五:列举已安装的存储设备 - bhw98的专栏 - CSDNBlog
- C++ Builder 访问 USB 口的方法
- Linux 系统调试...
- 控制PDA的背光和电源
- 为 sqlalchemy model 生成 html form
- 网络聊天室