C++ 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.cn/139436.html原文链接:https://javaforall.cn
相关文章
- C++数据结构——队列「建议收藏」
- c++语言截取字符串,详解C++ string常用截取字符串方法
- windows环境下用c++实现socket编程
- C++map函数的用法_random函数用法
- 为了避免内存攻击,美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift,但将 C 和 C++ 置于一边
- C++STL容器stack
- 有序的Map集合_map集合特点
- C++:set、map的使用及其特性和区别
- C++精通之路:map和set的介绍和有关oj题
- C++map的遍历_Map集合循环遍历的几种方式
- c++深拷贝和浅拷贝
- C++中的stringstream及其应用
- 蓝桥杯大赛软件类省赛C/C++大学B组-修剪灌木
- 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
- 【C++】用一棵红黑树同时封装出map和set
- C++STL中set的使用策略(详解)编程语言
- C++ map的创建(STL map的创建)详解
- C++ map(STL map)构造元素(emplace和emplace_hint函数)详解
- C++输出流迭代器(STL输出流迭代器)详解
- C++函数引用传递(超详细)
- C++ map(STL map)operator[]和insert()效率对比(深度剖析)
- 查询Redis中Map的广泛应用(查询redis的map)
- 如何将Map存储在Redis中(将map存到redis中)
- 解决Redis频繁修改Map难题(redis频繁修改map)
- 警惕Redis Map的频繁变更(redis频繁修改map)
- 在Redis中使用Map存储数据(redis里面加入map)
- 浅析C++中前置声明的应用与陷阱
- C++中的friend友元函数详细解析
- C++基础入门教程(四):枚举和指针