C++ STL map集合的使用「建议收藏」

C++ STL map集合的使用「建议收藏」有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。

大家好,又见面了,我是你们的朋友全栈君。

有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。

map关联集合的本质也是一棵红黑树,可以看做一个下标可以是任意类型的数组。

头文件是map:#include<map>

 常用方法

1)map<A,B> ds  建立一个名为ds、下标类型为A,元素类型为B的映射表,例如

map<string,int> 就是一个将string映射到int的映射表

2)ds[A] = B  把这个“数组”中下标为A的位置的值变成B,这里下标可以是任意类型,不一定限定为大于0的整数

3)ds[A]  访问这个“数组”中下标为A的元素,可以直接输出如cout<<ds[“ykx666”]<<endl;

4)ds.end()  返回映射表中最后一个元素的下一个元素的地址,通常配合其他方法来确认某个元素是否存在

5)ds.find(x) 查询x在映射表中的地址,如果不存在,则返回ds.end()

6)ds.empty() 如果映射表为空,则返回1,否则返回0

7)ds.size() 返回映射表中的元素个数

8)ds.erase(A) 删除这个”数组”中下标为A的元素

注意:在使用ds[A]访问“数组”下标为A的元素时,如果对应元素不存在,则会自动创建下标为A、值为默认值(例如,所有数值类型的默认值是0,string字符串是空字符串)的元素。

光说光看 知识是不够全面的,来结合题目看看。

题目选自洛谷P5266

 

题目描述

您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 10^5条):

  • 插入与修改,格式1 NAME SCORE:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为{SCORE}SCORE(0<SCORE<231) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
  • 查询,格式2 NAME:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found,否则输出该生成绩。
  • 删除,格式3 NAME:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found,否则输出Deleted successfully
  • 汇总,格式4:输出系统中学生数量。

输入格式

输出格式

输入输出样例

输入 1

5
1 lxl 10
2 lxl
3 lxl
2 lxl
4

输出 1

OK
10
Deleted successfully
Not found
0

解题代码: 

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
int n,opt,score; string name;
map<string,int> ds;
int main(){
	cin>>n;
	while(n--){
		cin>>opt;
		if(opt == 1){
			cin>>name>>score;
			ds[name] = score;
			cout<<"OK"<<endl;
		}else if(opt == 2){
			cin>>name;
			if(ds.find(name) != ds.end())
				cout<<ds[name]<<endl;
			else cout<<"Not found"<<endl;
		}else if(opt == 3){
			cin>>name;
			if(ds.find(name) != ds.end()){
				ds.erase(ds.find(name));
				cout<<"Deleted successfully"<<endl;
			}else{
				cout<<"Not found"<<endl;
			}
		}else{
			cout<<ds.size()<<endl;
		}
	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139436.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm使用技巧及常用快捷键_wps自定义快捷键设置

    pycharm使用技巧及常用快捷键_wps自定义快捷键设置PyCharm自身提供了大量实用的快捷键,但是由于自己之前其他软件的快捷键使用习惯与此不同,这就需要在PyCharm量身DIY属于自己的快捷键了。快来按照下面的流程操作吧!!!1、File—&gt;Settings【Settings的快捷键大家看到了嘛!!!Ctrl+Alt+S】2、Keymap—&gt;齿轮状设置—&gt;Duplicate建议在设置快捷键之前…

    2022年8月27日
    5
  • 世界名着100部简介

    世界名着100部简介01、傲慢与偏见      02、孤星血泪      03、雾都孤儿        04、唐·吉诃德  05、安娜·卡列尼娜      06、飘      07、简·爱       08、悲惨世界  09、茶花女      10、基督山恩仇记      11、童年         12、这里的黎明静悄悄  13、钢铁是怎样炼成的

    2022年4月28日
    46
  • SQL的区别及注意事项

    SQL的区别及注意事项

    2021年7月20日
    59
  • 音频编辑大师 3.3 注册名称 许可证

    音频编辑大师 3.3 注册名称 许可证

    2021年12月31日
    44
  • Java:详解Java中的异常(Error与Exception)[通俗易懂]

    Java:详解Java中的异常(Error与Exception)[通俗易懂]一、异常机制的概述异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。(3)…

    2022年7月7日
    22
  • java实训报告范文_java个人实训总结范文

    java实训报告范文_java个人实训总结范文java 个人实训总结范文总结是把一定阶段内的有关情况分析研究 做出有指导性的经验方法以及结论的书面材料 它在我们的学习 工作中起到呈上启下的作用 让我们一起认真地写一份总结吧 那么总结应该包括什么内容呢 下面是小编整理的 java 个人实训总结范文 希望对大家有所帮助 java 个人实训总结 1 此次只实训了短短的三周 虽说时间很短 但其中的每一天都使我收获很大 受益匪浅 它不但极大地加深了我对一些理论知识

    2025年6月29日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号