首页 > 其他分享 >4月19日map和multimap以及AVL树的学习

4月19日map和multimap以及AVL树的学习

时间:2023-04-19 23:27:06浏览次数:37  
标签:map multimap 相同 19 后面 元素 key 排序

map的插入比较繁琐,但是用方括号运算符就可以直接插入。也可以用方括号查找键的位置并且用它的返回值来修改值。同样map也可以用迭代器来遍历。map头文件中还有一个multimap关键字,他与map不同点在于它可以存入键相同的键值对,以应对某些情况。

给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。

 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/top-k-frequent-words
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题若是用到map就很容易,解题思路是先将vector中所有数据入到map中统计出每个单词的数量,然后再将键值对中的值由大到小排好序,依次放入新定义的vector中。但是若重新排序就会打乱一些已经按字典排好的且出现次数相同的单词,因为快排的底层是不稳定的。

所以这里复习一下各种排序(升序)的稳定性问题:

1:冒泡排序:冒泡排序是通过不断比较相邻的元素,将大数不断地冒泡向后面,假如两个元素相等,就不会进行交换,若不相邻,在冒泡完了后相同的元素次序也不会发生改变。所以他是稳定的

2:选择排序:选择排序是通过选取第一个数,与后面的数不断比较,遇到小的与之交换,所以前面的数再进行交换时可能交换到后面去,所以选择排序不是一个稳定的排序。

3:插入排序:插入排序是从数据的第一个开始,不断地将后面的数一个一个放在前n个数的有序序列中,因为是从前往后选择且从后往前插入的,所以相同的两个数,后面的也不会插到前面去,所以插入排序是一个稳定的排序。

4:希尔排序;希尔排序是插入排序的变形,他能更快的将大的数放在后面,将小的数放在前面。但是在排序的过程中相同的数可能被不同的分割导致分离交换,所以他不是一个稳定的排序。

5:堆排序:堆排序是通过建堆后,不断将堆顶的元素与堆尾元素交换,然后前n-1个元素向下调整,进行排序的,有可能相邻的相同元素,被不同的双亲调走导致顺序被打乱,所以堆排序也不是一个稳定的排序。

6:归并排序:归并排序的底层是通过不断分割和合并两个有序数组完成的,当两个相同元素合并时,前面的还在前面,后面的还在后面。所以归并排序是稳定的排序。

7:快速排序:快速排序有三种方式,但是思路都是将特定元素放在他应有的位置,步骤是选取一个key,然后从数组的两端开始前面找到比key大的后面找到比key小的交换,不断如此当前后指针相遇时,比key大的都放在了相遇位置的后面比key小的都放在了相遇位置的前面,再将key放在相遇位置,那么key的位置就对了在循环进入key的左区间和右区间,不断排序,直到完成。因为若有相同的数据则这个数据的合适位置就有两个,不能保证前面的树就能一定放在前面,所以快排不是一个稳定的排序。

言归正传,因为快排可能会破坏map的中键的字典序列,所以不能用快排,这时multimap就派上用场了,将map中的数全部入到multimap类型的sortmap中,对于相同的数据,他不会破坏已有的顺序,所以只需要降序出前k个sortmap中的数据放入定义的vector中即可。

代码图:

 

标签:map,multimap,相同,19,后面,元素,key,排序
From: https://www.cnblogs.com/qjwxlj/p/17335039.html

相关文章

  • 4、19
    收获:1)补漏:小根堆对顶竟然是最小值2)数学:1、用数学课理解了扩展欧几里得算法和它的大部分应用2、发现数学章节推不动了,从中国剩余定理开始都不会了3、发现数学老师不会推欧拉的函数式子3)做题一定先想好什么时候无解数据结构一......
  • 4月19号总结
    今天完成了河北科技政策查询的改良增加了题目左对齐,显示字数一致,当鼠标悬浮在题目时,显示完整题目按日期排序点击题目就可以查看内容,取消原先右边的查看按钮<%--CreatedbyIntelliJIDEA.User:wanghongbingDate:2023/4/10Time:15:20Tochangethistemplat......
  • 2023.4.19
    1//1.7最佳存款方案2//假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后的3//五年中的每年年底取出1000元,到第五年时正好取完,请算出他存钱时应存入多少4#include<iostream>5usingnamespacestd;6intmain()7{8floatm,n;9......
  • 每日总结 4.19
    今天进行了供货商web的编写,首先进行了登陆界面的设计优化,对于数据的查询用表格显示,明天继续对供货商页面继续进行数据的操作,登陆界面已经完成。 <!DOCTYPEHTML><html><head><title>登录界面</title><metacharset="utf-8"><metahttp-equiv="pragma"con......
  • 每日总结2023-04-19
    今天完成了对Android的界面优化,增添了昨日收入查看,总收入查看,并对三项收入增添了密文显示, 完成了下部分额外部分显示、跳转补货界面的Spinner使用   目前地址的当前详细位置还未完成,期望明天完成。 ......
  • 2023.4.19每日会议
    今天完成了什么:将图片识别的结果录入到数据库遇到了什么困难:将图片识别的结果录入到数据库后,我们有一个需要用户确认录入的信息是否正确的功能,如果不正确则让用户实现更改,但在更改时不断的报错以及数据库响应数为0,折腾一晚上也没有得到结果,打算明天解决明天打算做什么:解决今天遇......
  • 4/19打卡
    classPeople{protected:intage;stringname;public:People(){}People(inta,stringn):age(a),name(n){}virtual~People(){}voidsetValue(intm,stringstr){age=m;name=str;}virtualvoiddi......
  • 4.19
    1#include<iostream>2usingnamespacestd;3intmain()4{5intx;6cin>>x;7cout<<"gongxinikaole90fen!";8return0;9} 1#include<iostream>2usingnamespacestd;3intmain()4{5......
  • 单调栈_20230419
    通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了739.每日温度题目说明请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置......
  • 2023 4 19
    #include<iostream>usingnamespacestd;voidspeed(doublea){doublev;v=(a-95859)/2;cout<<"汽车的车速为"<<v<<endl;}intmain(){inti,j;doubles;intA[5]={0};for(i=95860;i<100000;i++){intt=i;for(j=0;j<5......