前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,一经查实,立即删除!

相关文章

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

背景 求职方向&#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;吸引了越来越多注重家居设计的人群。 酒精壁炉的设计灵活性为家居注入了新…

工作流引擎架构设计

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

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…

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

在现代企业中&#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.选取一个…

医院手术麻醉信息系统全套源码,自主版权,支持二次开发

医院手术麻醉信息系统全套商业源码&#xff0c;自主版权&#xff0c;支持二次开发 手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与…

人工智能中的文本分类:技术突破与实战指导

在本文中&#xff0c;我们全面探讨了文本分类技术的发展历程、基本原理、关键技术、深度学习的应用&#xff0c;以及从RNN到Transformer的技术演进。文章详细介绍了各种模型的原理和实战应用&#xff0c;旨在提供对文本分类技术深入理解的全面视角。 关注TechLead&#xff0c;分…

回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测

回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SCN随机配置网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现SCN随机配置网络多变量回归预测 1.data为数据集&#xff0c;7个输入特征&#xff0…

基于Python实现汽车销售数据可视化+预测【500010086.1】

导入模块 import numpy as np import pandas as pd from pylab import mpl import plotly.express as px import matplotlib.pyplot as plt import seaborn as sns设置全局字体 plt.rcParams[font.sans-serif][kaiti]获取数据 total_sales_df pd.read_excel(r"./data/中…

机器学习第13天:模型性能评估指标

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 交叉验证 保留交叉验证 k-折交叉验证 留一交叉验证 混淆矩阵 精度与召回率 介绍 精度 召回率 区别 使用代码 偏差与方差 介绍 区…

zerotier 搭建 moon中转服务器 及 自建planet

搭建moon 服务器 环境准备 # 安装依赖 yum install wget gcc gcc-c git -y yum install json-devel -y# 下载及安装 curl -s https://install.zerotier.com/ | sudo bash节点ID 配置 配置moon.json文件 cd /var/lib/zerotier-one/# 导出依赖 zerotier-idtool initmoon ide…

SpringBoot项目连接,有Kerberos认证的Kafka

在连接Kerberos认证kafka之前&#xff0c;需要了解Kerberos协议 二、什么是Kerberos协议 Kerberos是一种计算机网络认证协议 &#xff0c;其设计目标是通过密钥系统为网络中通信的客户机(Client)/服务器(Server)应用程序提供严格的身份验证服务&#xff0c;确保通信双方身份的真…

历时三个月,我发布了一款外卖返钱小程序

近几年&#xff0c;推广外卖红包爆火&#xff0c;各种推广外卖红包的公众号层出不穷。于是&#xff0c;我就在想外卖红包究竟是怎么一回事。就这样&#xff0c;我带着问题开始了关于外卖红包的研究。 在研究的过程中&#xff0c;我开始了解商品联盟、推广分成、cps等一系列相关…