C++中的关联容器map下标运算符[]使用分析

news2024/9/23 11:14:39

最近使用到C++中的map,发现一个问题,如果一个键不存在时,下标运算符会创建一个新的元素,其关键字为键。

一,问题重现

首先看一下问题描述:

本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。

输入格式:

输入在第 1 行给出不超过 105 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。

输出格式:

在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:

3 2 0

思路分析:使用一个map来接收这些数据,顺便还能统计每个分值出现的次数,实现代码如下:



int main(){
    int n;
    cin >>n;
    map<int, int>stu_grades;

    int grade = 0;
    for (int i =0;i < n;i ++){
        cin >>grade;
        ++stu_grades[grade];
    }
    int m;
    cin >>m;
    vector<int> search;
    for(int i =0;i < m ; i++){
        cin >>grade;
        search.push_back(grade);
    }

    for(int i =0;i < m ; i++){
        cout << stu_grades[search[i]];
        if (i != m-1){
            cout << ' ';
        }
    }
    cout <<endl;

    return 0;
}

上面的问题似乎可以解决,但是如果要查找的分数在stu_grades中使用下标运算符([]) 去查找,会发生什么,不妨来看一下:

 

会发现stu_grades的容量竟然增加了1,这是因此88并不存在于stu_grades这个map中,当使用下标运算符去查找值的时候,stu_grades会自动创建一个新元素,其键为88,值为0. 

 

二,分析问题

当键不存在于map中,下标运算符会自动创建一个新元素,其关键字为该键。

三,解决办法

要在一个map中查找某个键是否存在时,可以使用容器的find方法,这样做就不会增加原先map的容量了。

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

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

相关文章

最细接口自动化测试yaml框架,超全详解,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 YAML文件介绍 YAM…

津津乐道设计模式 - 责任链模式详解(教你更优雅的处理商城下单业务)

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Linux系统的目录结构与基本命令

目录 Linux系统使用注意 Linux严格区分大小写 Linux文件"扩展名" Linux系统中常见的后缀名称&#xff1a; Linux中所有内容以文件形式保存 Linux中存储设备都必须在挂载之后才能使用 Linux系统的目录结构 Linux分区与Windows分区 Linux系统文件架构 Linux系…

用AI帮助小学一年级记住常用字

这几天娃就要一年级毕业放假了&#xff0c;感觉时间过得太快了。再开学就要上二年级&#xff0c;可汉字表上的区区三四百字&#xff0c;咋就那么的难读&#xff1f;难记&#xff1f;喊他们来认字&#xff0c;拉都拉不过来。哎&#xff0c;愁啊&#xff0c;替他们焦虑。突发奇想…

Docker发布VUE vhr微人事前端(Nginx 403 forbidden)

本文代码来源于&#xff08;感谢作者&#xff09; GitHub - lenve/vhr: 微人事是一个前后端分离的人力资源管理系统&#xff0c;项目采用SpringBootVue开发。 发布过程参考博主 【Docker】使用docker容器发布vue项目_docker 发布vue_TOP灬小朋友的博客-CSDN博客 1.创建Do…

食品空压机数据采集远程监控系统解决方案

食品行业是一个需求量大、安全标准高、竞争激烈的行业。随着人们消费水平的提升&#xff0c;对食品的品质、口味、营养、卫生等方面有了更高的要求。食品空压机是食品生产过程中不可缺少的设备&#xff0c;它可以提供稳定的压缩空气&#xff0c;用于食品加工、包装、运输等环节…

大聪明教你学Java | 深入浅出聊 ThreadPoolExecutor

前言 🍊作者简介: 不肯过江东丶,一个来自二线城市的程序员,致力于用“猥琐”办法解决繁琐问题,让复杂的问题变得通俗易懂。 🍊支持作者: 点赞👍、关注💖、留言💌~ 在《阿里巴巴 Java 开发手册》中有这么一个强制要求:“线程池不允许使用 Executors 去创建,而是…

6月第4周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年6月19日-6月25日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

【计算机网络】数据链路层之随机接入-CSMA/CD协议

1.概念 2.信号碰撞&#xff08;冲突&#xff09; 3.解决方案 CSMA/CD 4.争用期&#xff08;端到端往返时延&#xff09; 5.最小帧长 6.最大帧长 7.指数退避算法 8.信道利用率 9.帧发送流程 10.帧接受流程 12.题目1 13.题目2 14.题目3 15 小结

linux:docker-compose下载后无法使用

参考&#xff1a; Ubuntu 安装 Docker & Docker-Compose - 知乎 解决方法: PC上下载二进制文件&#xff0c;之后filezilla上传到服务器对应目录

项目一、黑客攻击系统功能菜单->功能菜单

功能菜单 项目需求 注&#xff1a;本小节"是写功能的选项&#xff0c;在有图形化的app当中&#xff0c;肯定有选项 这章节就是讲怎么写选项的" 什么是图形化&#xff1a;把文字翻译成图像或者是图片等等。 功能选项&#xff1a; 1.网站404攻击 2.网站篡改攻击 3.网站…

Acer宏碁超轻薄笔记本非凡Swift系列SF314-57G原装出厂Win10系统工厂模式 恢复原厂OEM系统

Acer宏基超轻薄笔记本电脑&#xff0c;Acer宏碁Swift系列非凡SF314-57G原装出厂Windows10系统(工厂模式) 恢复原厂预装OEM系统 系统自带所有驱动、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access等预装程序 所需要工具&#xff1a;32G或以上的U盘&#…

chatgpt 用来取名字

Object ,array 相对 string,int 来说是什么类型, 分别用英文名称来定义他们的类型类别

应用在数字音频工作站中的ADC芯片

数字音频工作站&#xff08;DAW&#xff09;是电子设备或应用软件用于记录&#xff0c;编辑和产生的音频文件。数字音频工作站具有多种配置&#xff0c;从便携式计算机上的单个软件程序到集成的独立单元&#xff0c;一直到由中央计算机控制的众多组件的高度复杂的配置。无论配置…

vue3-实战-15-管理后台-动态实现菜单权限和按钮权限

目录 1-菜单路由权限分析 2-菜单权限实现 2.1-路由拆分 2.2-动态计算当前用户的权限 3-按钮权限实现 1-菜单路由权限分析 目前我们系统中有&#xff1a;login(登录页面)、404(404一级路由)、任意路由、首页(/home)、数据大屏、权限管理(三个子路由)商品管理模块(四个子路由…

libevent(14)bufferevent的client端例子

前面我们写了基于bufferevent的server端&#xff0c;这里我们写1个基于bufferevent的client端。 test_libevent_client.cpp&#xff1a; #include <string.h> #include <errno.h> #include <stdio.h> #include <signal.h> #include <netinet/in.h&…

wsl下面的子系统启用systemctl

下载地址 https://github.com/gdraheim/docker-systemctl-replacement 操作 mv /usr/bin/systemctl /usr/bin/systemctl.old #对原文件进行备份sudo scp /mnt/c/Users/Administrator/Desktop/systemctl.py /usr/bin/systemctl #把项目中的systemctl.py文件拷贝到/use/bin/ 目…

vitest测试 element-plus二次封装组件时css文件报错

bug描述&#xff1a;使用 element-plus 二次封装组件&#xff0c;使用 vitest 测试时报错&#xff0c;对于 element-plus 的 css 样式识别失败。 报错内容&#xff1a; Unknown file extension “.css” for D:\demo\omniButton\node_modules.pnpm\registry.npmmirror.comeleme…

SQL专家云快速解决阻塞

背景 当数据库突然产生严重阻塞时&#xff0c;运维人员要快速找到阻塞的源头并处理&#xff0c;让业务快速恢复。但是大多数运维人员只掌握了sp_who2、sp_lock等简单的语句&#xff0c;存在以下不足&#xff1a; 找不到真正的源头&#xff0c;过程中会误杀掉大量的会话&#xf…

IDE写代码,你用哪一款比较好?

目前市面上IDE种类非常多&#xff0c;很多程序员都会纠结究竟用哪一种IDE写代码比较好呢&#xff1f;IDE不过是写代码的辅助工具而已&#xff0c;运行环境和书写格式其实都一样&#xff0c;关键在于你用哪一款比较顺手。以下为大家推荐一些&#xff0c;一些常用的IDE工具&#…