Hello,大家好,我是@菜就多练,输不起就别玩,今天我们来讲映射。
由于近期有事,所以停更了一段时间,请大家谅解。
在 C++ 标准模板库(STL)中,map 是一种关联容器,它存储键值对(key-value pairs),并根据键进行排序(不是按新增顺序)。map 允许高效的键值查找、插入和删除操作。
···
map<string, int> m1;m1["yes"] = 1;m1["ok"] = 2;for(auto p=m1.begin(); p!=m1.end(); p++) {cout << p->first << " : " << p->second << ";" <<endl;}cout << "第一个键值是:" << m1.begin()->first << endl;cout << "第一个键值对应的映射值是:" << m1.begin()->second << endl;
···
判断某键值是否存在
find() 方法接受一个键作为参数,并返回一个迭代器(或常量迭代器,如果 map 是常量的话)。如果找到了具有给定键的元素,返回的迭代器将指向该元素;如果没有找到,返回的迭代器将等于 map 的 end() 迭代器。
删除元素和清空映射表
- 可以使用 erase 方法删除一个元素
- 使用 clear 方法删除全部元素
#include <iostream>
#include <map>
int main() {map<string, int> myMap = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};// 删除键为 "Bob" 的元素myMap.erase("Bob");// 检查是否删除成功if (myMap.find("Bob") == myMap.end()) {cout << "Bob is removed." << endl;}myMap.clear();return 0;
}
接下来,我们来看一道 历年真题
#A. C07.L07.STL之映射.应用1.查字典
小明正在复习全国英语四级考试,他手里有一本词典,现在有很多单词要查。请编写程序帮助他快速找到要查的单词所在的页码。
输入格式
- 第 1 行 1 个正整数 N,N<=10,000,表示字典中一共有多少个单词。
- 接下来每两行表示一个单词,其中:
- 第 1 行是一个长度小于或等于 100 的字符串,表示这个单词,全部小写字母,单词不会重复。
- 第 2 行是 1 个整数,表示这个单词在字典中的页码。
- 接下来一行是 1 个整数 M ,M <= 10,000,表示要查的单词数。
- 接下来的M行,每行一个字符串,表示要查的单词,保证在字典中存在
输出格式
M 行,每行一个正整数,表示第 i 个单词在字典中的页码。
样例
输入数据 1
2
scan
10
word
15
2
scan
word
Copy
输出数据 1
10
15
接下来,我们来看他的正确代码。
#include<bits/stdc++.h>
using namespace std;
//unsigned long long ;
map<string,int >dsnv;
int n,m;
int main(){cin>>n;for(int i=1;i<=n;i++){string s;int a;cin>>s>>a;dsnv[s]=a;}cin>>m;for(int i=1;i<=m;i++){string b;cin>>b;cout<<dsnv[b]<<endl;}return 0;
}
是不是一点都看不懂呢
其实,这就是映射。
这是五年级常考类型。
这是最简单的
我们来看一下难亿点的
//菜就多练,输不起,就别玩
//以前是以前,现在是现在
//不要总拿以前当现在
#include<bits/stdc++.h>
using namespace std;
//unsigned long long ;
int n;
map<int,int>dc;
int main(){cin>>n;for(int i=1;i<=n;i++){int a;cin>>a;dc[a]++;}map<int,int>::iterator it;for(it=dc.begin();it!=dc.end();it++){cout<<it->first<<" "<<it->second<<endl;}return 0;
}
是不是很无语呢
好了,今天的分享就到这里了,我们下期不见不散,拜拜;