map和set的排序
来源:互联网 发布:mac如何更改文件夹名 编辑:程序博客网 时间:2024/04/29 04:59
C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。
map和set的树建立之时就会自动排好序,之前使用map,觉得按value排序很麻烦,要建一个multimap将原map倒置存储。如何只用一个map实现value的排序呢?将key 和 value建一个结构体,再将结构体作为key建一个map。
而排序当然要写比较函数,这个又如何解决呢?之前没去想map构造map<T1, T2>时,其实是有个默认的比较函数 map<T1, T2, less<T1>> ,即按key的升序排列,我们可以重写比较函数来实现我们想要的排序(value)。假设string是key, int是value;
代码如下:
另外还有一种方法,利用默认的less<T>,将结构体的操作符<重载一下,比较部分的代码几乎和上面一样,只是思维角度不同而已。
代码如下:
不过感觉第一种方法已经够用了。
比较函数中,如果写成return (a1.n < a2.n),map构造成map<int, int> 而不是map<A, int>, A的所有对象中n相同的项都会被认为是同一个,所以 return (a1.n < a2.n ||(a1.n == a2.n && a1.s < a2.s)); 才是正确的写法.简单地从理解的角度来说,比较函数决定了map的key.
set写法与map类似,插入元素的时候用myset.insert(rec)就好了。
- map和set的排序
- map和set的排序
- set和map的区别
- set和map的区别
- Set和Map的内部结构
- Set和Map的内部结构
- map和set的异同
- Set和Map的内部结构
- C++ 的 map 和 set
- c++的map和set
- map和set的区别
- js的map和set
- set和map的使用
- es6的map和set
- ES6的Set和Map
- hibernate Set与Map的排序
- map/set自动排序的陷阱
- map/set自动排序的陷阱
- 阻塞式的消息队列
- 软件测试的重要性
- 接触oracle
- CDMA终端上IP业务的QOS保障知识学习(1)
- C#将DataGridView中的数据导出为EXCEL
- map和set的排序
- 用HOOK来修改API函数的功能(1)-注册表(转)
- Silverlight 3 - MultiThreading编程
- 开机启动程序的编写
- 用HOOK来修改API函数的功能(2)-创建文件(转)
- 用HOOK来修改API函数的功能(3)-禁止删除文件(转)
- 用HOOK来修改API函数的功能(4)-环境搭建(转)
- lvm(逻辑卷管理器)的介绍和常用功能流程实验
- 用HOOK来修改API函数的功能(5)-EXE和WDM驱动通信(转)