C++ multiset通过greater、less指定排序方式,实现最大堆、最小堆功能
STL中的set和multiset基于红黑树实现,默认排序为从小到大。
定义三个multiset实例,进行测试:
multiset<int, greater<int>> greadterSet; multiset<int, less<int>> lessSet; multiset<int> defaultSet; for (int i = 0; i < 10; i++) { int v = int(arc4random_uniform(10)); greadterSet.insert(v); lessSet.insert(v); defaultSet.insert(v); } for (auto v: greadterSet) { printf("%d ", v); } printf("\n"); for (auto v: lessSet) { printf("%d ", v); } printf("\n"); for (auto v: defaultSet) { printf("%d ", v); } printf("\n");
输出结果:
9 9 8 7 7 5 4 1 0 0 0 0 1 4 5 7 7 8 9 9 0 0 1 4 5 7 7 8 9 9
可以为multiset指定排序方式,以此实现类似最大堆、最小堆的功能。
比如:当前排序方式为降序,那么greaterSet.begin()所指向的值就是最大值。
可以参考《剑指Offer》中的 面试题30:最小的K个数。
Ficow原创,转载请注明出处: https://www.cnblogs.com/ficow/p/10045777.html
Stay hungry,stay foolish.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步