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