1.map
2.multimap 支持重复
3.unordered_map 不排
#相关函数
& insert 插入
& clear 清空
& find 查找
& count 查找
& lower_bound upper_bound 二分查找
& erase 删除
& size 长度
& clear 清空
2.set
与map类似
#例题
洛谷P5266 【深基17.例6】学籍管理
题目描述
您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 10^5105 条):
- 插入与修改,格式
1 NAME SCORE
:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为 \texttt{SCORE}SCORE(0<\texttt{SCORE}<2^{31}0<SCORE<231) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
。 - 查询,格式
2 NAME
:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found
,否则输出该生成绩。 - 删除,格式
3 NAME
:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found
,否则输出Deleted successfully
。 - 汇总,格式
4
:输出系统中学生数量。#include<bits/stdc++.h> using namespace std; int main() { long long n,m,g; string h; cin>>n; unordered_map<string,long long>a; for(int i=0;i<n;i++){ cin>>m; if(m==1){ cin>>h>>g; a[h]=g; cout<<"OK\n"; } else if(m==2){ cin>>h; auto it=a.find(h); if(it!=a.end()) cout<<a[h]<<"\n"; else cout<<"Not found\n"; } else if(m==3){ cin>>h; auto it=a.find(h); if(it!=a.end()){ a.erase(h); cout<<"Deleted successfully\n"; } else cout<<"Not found\n"; } else cout<<a.size()<<"\n"; } return 0; }
洛谷P3370 【模板】字符串哈希
-
题目描述
-
如题,给定 NN 个字符串(第 ii 个字符串长度为 M_iMi,字符串内包含数字、大小写字母,大小写敏感),请求出 NN 个字符串中共有多少个不同的字符串。
友情提醒:如果真的想好好练习哈希的话,请自觉。
输入格式
第一行包含一个整数 NN,为字符串的个数。
接下来 NN 行每行包含一个字符串,为所提供的字符串。
输出格式
输出包含一行,包含一个整数,为不同的字符串个数。
-
#include<bits/stdc++.h> using namespace std; int main(){ unordered_set<string>a; string m="",b; int n=0,k; cin>>k; for(int i=0;i<k;i++){ cin>>b; a.insert(b); } cout<<a.size(); return 0; }
蒟蒻等待大佬指教~~