前k个高频单词(C++实现)

前k个高频单词

  • 题目
  • 思路
  • 代码
  • 代码讲解

题目

在这里插入图片描述


思路

通过统计字符串的出现次数,并根据出现次数和字典序对字符串进行排序,找出出现频率最高的前k个字符串。使用一个自定义的仿函数作为排序的比较函数,通过map容器进行统计,然后将结果存储在向量中返回


代码

 //仿函数struct kvCom{bool operator()(const pair<string,int>& p1,const pair<string,int>& p2){return p1.second>p2.second || (p1.second==p2.second && p1.first<p2.first);}};vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> CountMap ;for (auto &e : words){CountMap[e]++;}//sort中的支持的是随机迭代器,而map是双向迭代器,所有将map中的数据存到vector中再用sortvector<pair<string,int>> sortV(CountMap.begin(),CountMap.end());//稳定的sort//stable_sort(sortV.begin(),sortV.end(),kvCom());sort(sortV.begin(),sortV.end(),kvCom());//对次数排序vector<string> ret;for (int i=0;i<k;i++){ret.push_back(sortV[i].first);}return ret;}

代码讲解

 struct kvCom{bool operator()(const pair<string,int>& p1,const pair<string,int>& p2){return p1.second>p2.second || (p1.second==p2.second && p1.first<p2.first);}};
  • struct kvCom:定义了一个结构体kvCom,它是一个仿函数(function object)。仿函数是重载了函数调用操作符operator()的对象,可以像函数一样被调用。在这个结构体中,重载了operator(),用于定义对存储字符串-整数对的pair进行比较的规则。
  • bool operator()(const pair<string,int>& p1,const pair<string,int>& p2):这是kvCom结构体中的函数调用操作符的重载。它接受两个参数,都是pair<string,int>类型的引用。函数的目的是比较这两个pair对象的大小,返回一个布尔值表示两个对象的大小关系。具体的比较规则如下:
    首先比较第二个元素(即整数部分)的大小,如果p1的第二个元素大于p2的第二个元素,则返回true,否则返回false。
    如果两个元素的第二个元素相等,那么比较第一个元素(即字符串部分)的大小,如果p1的第一个元素小于p2的第一个元素,则返回true,否则返回false。
vector<string> topKFrequent(vector<string>& words, int k) {map<string,int> CountMap ;for (auto &e : words){CountMap[e]++;}//sort中的支持的是随机迭代器,而map是双向迭代器,所有将map中的数据存到vector中再用sortvector<pair<string,int>> sortV(CountMap.begin(),CountMap.end());//稳定的sort//stable_sort(sortV.begin(),sortV.end(),kvCom());sort(sortV.begin(),sortV.end(),kvCom());//对次数排序vector<string> ret;for (int i=0;i<k;i++){ret.push_back(sortV[i].first);}return ret;}
  • map<string,int> CountMap:定义了一个map容器CountMap,用于统计每个字符串在words中出现的次数。map是一个关联容器,它存储了键-值对,其中键是唯一的,即每个字符串只会在map中出现一次,值表示字符串出现的次数。
  • for (auto &e : words):遍历words中的每个字符串,使用引用&e来获取字符串的引用。这样可以避免在循环中对字符串进行拷贝,提高性能。
  • CountMap[e]++:将当前遍历到的字符串e作为键,在CountMap中查找对应的值,并将其加1。如果e在CountMap中不存在,则会自动插入一个键为e,值为0的键-值对,然后将值加1。
  • vector<pair<string,int>> sortV(CountMap.begin(),CountMap.end()):sort中的支持的是随机迭代器,而map是双向迭代器,所有将map中的数据存到vector中再用sort。使用CountMap中的数据初始化一个存储字符串-整数对的sortV。这样做是为了将CountMap中的数据按照出现次数进行排序。
  • sort(sortV.begin(),sortV.end(),kvCom()):对sortV中的元素按照指定的排序规则进行排序。这里使用了kvCom结构体的对象作为比较函数,用来定义排序规则。排序的规则是按照字符串出现次数的降序排列,如果出现次数相同,则按照字符串的字典序(升序)进行排列。
  • vector ret:定义一个字符串向量ret,用于存储结果。
  • for (int i=0;i<k;i++):从排序后的向量sortV中取出前k个字符串。
  • ret.push_back(sortV[i].first):将第i个字符串的第一个元素(即字符串本身)添加到结果向量ret中。
  • return ret:返回存储了出现频率最高的前k个字符串的向量ret。

(本题完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/166330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:strace 简介

文章目录 1. 前言2. 什么是 strace ?3. 使用 strace3.1 追踪指定进程3.1.1 通过程序名追踪进程3.1.2 通过 进程 ID (PID) 追踪程序3.1.3 追踪 子进程 或 线程 3.2 系统调用情况统计3.3 追踪过滤3.3.1 追踪指定的系统调用集合3.3.2 追踪对指定文件句柄集合操作的系统调用3.3.3 …

前端已死?看看我的秋招上岸历程

背景 求职方向&#xff1a;web前端 技术栈&#xff1a;vue2、springboot&#xff08;学校开过课&#xff0c;简单的学习过&#xff09; 实习经历&#xff1a;两段&#xff0c;但都是实训类的&#xff0c;说白了就是类似培训&#xff0c;每次面试官问起时我也会坦诚交代&…

关于鸿蒙网络请求的问题

https://developer.huawei.com/consumer/cn/forum/topic/0204136145853212268?fid0102683795438680754 鸿蒙OS 代码 import http from ohos.net.http;export const httpUtils (url: string, data: any) > {return new Promise((resolve, reject) > {let httpRequest …

创意设计与个性化定制:酒精壁炉的独特之处

在当今家居装饰的潮流中&#xff0c;人们越来越注重个性化和创意&#xff0c;而酒精壁炉正是在这一趋势中崭露头角。它不仅成为家居的温馨之选&#xff0c;更因其设计的灵活性而成为创意焦点&#xff0c;吸引了越来越多注重家居设计的人群。 酒精壁炉的设计灵活性为家居注入了新…

vue的package.json详细说明

前言 package.json 文件是一个非常重要的文件,它用于存储关于项目的元信息以及依赖项。在 Vue.js 项目中,package.json 文件描述了项目的名称、版本、描述、作者、依赖项、脚本命令等信息。 说明 package.json 文件常见的 详细说明: 1.名称 (name): 项目的名称。遵循反向…

工作流引擎架构设计

一个应用MIS的系统的架构离不开工作流引擎&#xff0c;具有流程引擎思维的架构人员设计系统的时候就有流程的思维&#xff0c;他区别于过程思维&#xff0c;过程思维开发出来的系统&#xff0c;用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待办、在途、查询、近…

SELinux refpolicy详解(2)

接前一篇文章:SELinux refpolicy详解(1) 本文内容引自: Documentation SELinuxProject/refpolicy Wiki GitHub 4. 入门指南 文档是参考策略的主要目标之一。入门指南(https://github.com/SELinuxProject/refpolicy/wiki/GettingStarted)提供了有关编写参考策略模块的…

关于vue3项目中 vite.config.js项目配置 多个请求地址代理配置

关于VUE3 vite.config.js文件配置相关 提示&#xff1a;本文记录了我们项目中使用到了多个不同的接口请求前缀地址配置代理&#xff0c;如果有更好的优化方案欢迎大佬指点呀&#xff1a; 以下是我最近项目中的vite.config.js文件配置&#xff0c;由于刚开始vue3不久&#xff…

JS 类型转换机制

这篇写得不错&#xff1a; 百度安全验证 包括显示转换&#xff08;就是调用函数&#xff09;、隐式转换&#xff08;运算符 - 时自动转换成数字/字符串&#xff09; 注意到&#xff1a; abc-1 //NaN 非法字符转换为数字 结果是NaN

LeetCode 1410. HTML 实体解析器:字符串匹配

【LetMeFly】1410.HTML 实体解析器&#xff1a;字符串匹配 力扣题目链接&#xff1a;https://leetcode.cn/problems/html-entity-parser/ 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。…

【点云surface】基于多项式重建的平滑和法线估计

1 介绍 基于多项式重建的平滑和法线估计&#xff08;Smoothing and normal estimation based on polynomial reconstruction&#xff09;是一种常用的点云处理方法&#xff0c;用于平滑点云数据并估计每个点的法线信息。 该方法基于Moving Least Squares&#xff08;MLS&…

docker安装nacos,实现和mysql容器的通信

1.下载nacos镜像 docker pull nacos/nacos-server2. 启动nacos 启动命令如下&#xff1a; docker run -d -p 8848:8848 --name nacos \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e SPRING_DATASOURCE_PLATFORMmysql \ -e MYSQL_SERVICE_HOST192.168.131.223…

连接的原理(待修改)

搞数据库⼀个避不开的概念就是Join&#xff0c;翻译成中⽂就是连接。 相信很多⼩伙伴在初学连接的时候有些⼀脸懵逼&#xff0c;理解了连接的语义之后⼜可能不明⽩各个表中的记 录到底是怎么连起来的&#xff0c;以⾄于在使⽤的时候常常陷⼊下边两种误区&#xff1a; 误区⼀&…

linux磁盘清理

目录 排查过程1、查看磁盘占用情况2. 按照占用大小进行倒排-当前目录及其子目录3.当前目录磁盘占用情况 清理命令 排查过程 1、查看磁盘占用情况 df -hdf -h 命令用于显示磁盘空间的使用情况&#xff0c;以人类可读的方式呈现&#xff0c;其中&#xff1a;df 是 “disk free”…

“AI就绪”新计划,亚马逊云科技到2025年向200万人提供免费AI技能培训

AI就绪&#xff08;AI Ready&#xff09;计划 到2025年为全球200万人提供 免费人工智能&#xff08;AI&#xff09;技能培训和教育资源 亚马逊云科技宣布启动“AI就绪&#xff08;AI Ready&#xff09;”计划&#xff0c;旨在到2025年为全球200万人提供免费人工智能&#xff08…

Python与设计模式--适配器模式

7-Python与设计模式–适配器模式 一、外包人员系统兼容 假设某公司A与某公司B需要合作&#xff0c;公司A需要访问公司B的人员信息&#xff0c;但公司A与公司B协议接口不同&#xff0c; 该如何处理&#xff1f;先将公司A和公司B针对各自的人员信息访问系统封装了对象接口。cla…

易点易动固定资产管理系统:全生命周期管理的理想选择

在现代企业中&#xff0c;固定资产管理是一项至关重要的任务。为了确保企业的资产安全、提高资产利用率&#xff0c;全面管理固定资产的生命周期至关重要。易点易动固定资产管理系统为企业提供了一种全面的解决方案&#xff0c;实现了从固定资产申购、采购、入库、领用、退库、…

linux 内存回收mglru算法代码注释2

mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru&#xff0c;可参考linux 内存回收代码注释&#xff08;未实现多代lru版本&#xff09;-CSDN博客 新的算法在引入4代lru的同时&#xff0c;还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…

ELK企业级日志分析平台——elasticsearch

集群部署 文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html 下载&#xff1a;https://elasticsearch.cn/download/ 主机 ip 角色 k8s1 192.168.92.11 cerebro elk1 192.168.92.31 elasticsearch elk2 192.168.92.32 elasti…

数据库实验五 数据库设计

数据库实验五 数据库设计 一、实验目的二、实验内容三、实验内容四、验证性实验五、设计性实验 一、实验目的 1.了解E-R图构成要素以及各要素图元。 2.掌握概念模型E-R图的绘制方法。 3.掌握概念模型向逻辑模型的转换原则和步骤。 4.运用sql编程实现 二、实验内容 1.选取一个…