#include <iostream>
#include <map>
#include <set>
using namespace std;
/*
课堂目标:
掌握map和set的使用方法
知识点一:什么是map
类似于Python中的字典,一种用于存储关联型数据的结构
特性:
会根据字典序,对数据进行排序,以键的前后关系来排序
键唯一,值不唯一
a:b
//创建map: map <键类型, 值类型> 结构名称
map <string, int> Score ={{"Kevin", 99},{"amy",98},{"Lucy", 87}, {"kevin", 100},{"amy",100}};
//添加/修改(键不存在,将键值对添加到map中,存在的话,更新键值对)
Score["coco"] = 87;
Score["amy"] = 89;
//查询键值对数量/是否为空
cout<<Score.size()<<" "<<Score.empty()<<endl;
//查询元素位置
if (Score.find("Lucy") != Score.end()) cout<<"true"<<endl;
//遍历
map <string, int> ::iterator it;
for (it=Score.begin(); it!= Score.end(); it++) cout<<it->first<<" "<<it->second<<endl;
例题:
输入一个字符串,统计每个字母(区分大小写)出现的次数,忽略非字母字符,并按照字母顺序输出结果。
//输入
string str;
cin>>str;
//运算
map <char, int> mp;
for (int i=0; i<str.size(); i++){
if ( mp.find(str[i])!=mp.end() ) mp[str[i]]++; //已经出现的
else mp[str[i]]=1; //没有出现的
}
//输出
map <char, int> ::iterator it;
for (it = mp.begin(); it!=mp.end(); it++) cout<<it->first<<" "<<it->second<<endl;`
例题:
班级中有n名同学,班级举办活动,老师让 amy帮同学们买一些水果,
请输入每个同学喜欢的水果名称,每个同学只允许写一样,最后统计输出,需要买水平的数量
例如
输入:
3
apple
banana
apple
输出
apple 2
banana 1
int n;
cin>>n;
map <string, int> mp;
for (int i=0; i<n; i++){
string fruitName;
cin>>fruitName;
if ( mp.find(fruitName)!=mp.end() ) mp[fruitName]++; //已经出现的
else mp[fruitName]=1;
}
map <string, int> ::iterator it;
for (it = mp.begin(); it!=mp.end(); it++) cout<<it->first<<" "<<it->second<<endl;
知识点二: set
1、值唯一,
2、值有序
3、筛选
set <string> st = {"coco","kevin","amy","coco","Kevin"};
//添加数据
st.insert("jo");
//查找
if ( st.find("jo")!=st.end() ) cout<<"yes";
//判断是否为空
cout<<st.empty()<<" "<<st.size();
//遍历set
set <string> ::iterator it;
for(it=st.begin(); it!=st.end(); it++) cout<<*it<<" ";
例题:
输入一个字符串,输出字符串中包含哪些字符
string str;
cin>>str;
set <char> chr;
for (int i=0; i<str.size(); i++) chr.insert(str[i]);
set <char> ::iterator it;
for (it=chr.begin(); it!=chr.end(); it++) cout<<*it<<" ";
*/
int main() {
return 0;
}