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

原文地址:https://www.cnblogs.com/ficow/p/10045777.html

时间: 2024-10-09 05:12:27

C++ multiset通过greater、less指定排序方式,实现最大堆、最小堆功能的相关文章

浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因

本文出处:http://www.cnblogs.com/wy123/p/6189100.html 标题有点拗口, 先抛出问题:一个查询没有明确指定排序方式,那么,第二次执行这个同样的查询的时候,查询结果会不会与第一次的查询结果排序方式完全一样? 答案是不确定的,两个完全一样的查询,结果也完全一样,两次(多次)查询结果的排序方式有可能一致,有可能不一致. 如果不一致,又是什么原因导致同样的查询默认排序方式不一致? 以下简单分析几种情况,说明为什么查询同样的查询会出现默认排序结果不一样的情况.当然对

Linq排序方式与Lambda排序方式比较以及OrderBy、ThenBy的使用

沿用之前某一篇文章的实体类与EF操作类代码.数据库中增加几条数据 Linq 的排序方式,下面例子是根据RoleId 升序,Name降序 EFContext<Member> efMemberContext = new EFContext<Member>(); var memberSet = efMemberContext.Set<Member>().Include("Role"); var memberList = from m in memberSe

织梦设置栏目列表排序方式

标签dede:arclist的排序是通过orderby来指定的,如下: {dede:arclist orderby='排序字段' } {/dede:arclist} orderby='sortrank' 文档排序方式 § orderby='hot' 或 orderby='click' 表示按点击数排列 § orderby='sortrank' 或 orderby='pubdate' 按出版时间排列 § orderby='near' § orderby=='lastpost' 按最后评论时间 §

Linux Shell sort 指定排序第几列

ip.txt 里存储着ip信息 统计排序后取前10条 awk '{cnt[$1]++} END{for (ip in cnt) print ip":"cnt[ip]}' ip.txt | sort -k 2 -rn -t":" | head -n 10 awk '{cnt[$1]++} END{for (ip in cnt) print cnt[ip],ip}' ip.txt | sort -rn | head -n 10 sort -k  根据第几列排序  -n

sort_contours_xld算子的几种排序方式研究

sort_contours_xld算子有5种排序方式,即: 'upper_left': The position is determined by the upper left corner of the surrounding rectangle. 'upper_right':The position is determined by the upper right corner of the surrounding rectangle. 'lower_left':The position i

C#中Dictionary&lt;TKey,TValue&gt;排序方式

自定义类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CSharp中Dictionary排序方式 { [Serializable] public class CustmonizedClass { public string stuName { get; set; } public int

HashMap的两种排序方式

Map<String, Integer> map = new HashMap<String, Integer>(); map.put("d", 2); map.put("c", 1); map.put("b", 1); map.put("a", 3); List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.

superobject 设定排序方式

(* * Super Object Toolkit * * Usage allowed under the restrictions of the Lesser GNU General Public License * or alternatively the restrictions of the Mozilla Public License 1.1 * * Software distributed under the License is distributed on an "AS IS&q

discuz 修改亮剑积分商城2.91模板(在常用设置中添加商场首页排序方式的背景颜色)

在应用 -> 积分商城 -> 常用设置 中添加 商场首页排序方式 的背景颜色修改功能 步骤: 1.找到并打开此页面对应的模板source\plugin\aljsc\template\setting.htm 2.复制红色方块内的代码粘贴到方框底下: 3.将粘贴中的 c1 全部替换成 c2 和buttonbackcolor 替换成 linkbuttonbackcolor:保存即可,注意 排 是utf-8编码 <tr><td s="1" class="