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.