在这里我会讲解一下map的使用方法和一些例题,方便理解和去使用
我先讲解一下map的一些特性
map的作用类似于数组
但是它不同于数组的地方在于,数组的索引(下标)只能是int类型的,而map不一样,任何数据类型都能成为他的索引,包括但不限于double ,char ,string,甚至是中文。
map会将存进去的东西自动按字典顺序排序(a,b,c,d);
数字的话会按123456的顺序排序;
使用方法:
map<数据类型,数据类型> 名字;
比如:map<int,int> a;
这里的int可以换成其他数据类型,上文有提到;
这里第一个数据类型的表示map的键;
相当于数组的索引(下标);
右边的数据类型表示这个数组对应的值;
值的数据类型也对应着前面定义map的数据类型;
如果想要对这个map里面的内容进行遍历,需要用到迭代器或者直接使用auto;
我先讲迭代器:
迭代器的作用就是定义一个下标,通过下标的递增来进行遍历;
定义方法:map<数据类型,数据类型>::iterator:下标的名字(类似于数组下标);
具体情况参考代码:
map<string,int>::iterator i;
接下来就是auto了
这个比起迭代器会简单好理解很多;
auto会自动去匹配对应的类型,如:
for(auto i=a.begin();i!=a.end();i++)
遍历的时候会用到for
情况见代码:
for(i=a.begin();i!=a.end();i++)
表示从map中的第一个开始,到最后一个;
在遍历中想要取得当前循环中的值,有两种方法:
1:map的名字[迭代器名字->first];
2:迭代器名字->second;
都可以取到当前循环的值;
接下来我们来看一个例题:
统计次数:
曾经,在一座古色古香的小镇上,有一家宁静而温馨的双人小旅馆。杰克是这家旅馆的慈祥老板,每天都在忙碌地登记着前来入住的客人。随着时间的推移,杰克发现有些租客会多次出现在他的记录中,尽管他并不总是按照相同的顺序记录他们的名字。面对这种情况,杰克开始思考如何统计某段时间内进入旅馆次数最多的那组客人的进入次数。这个小小的难题成为了他日常琐事中的一抹乐趣。
数据范围:1≤N≤1000
输入格式:
第一行包含整数 N。接下来 N 行,每行都包含一组租客的名字,每组租客只包含两个人,每个名字都是一个长度在 1∼10之间的由小写字母构成的字符串。
输出格式:
输出进入旅馆次数最多的一组租客的进入次数。
输入样例:
在这里给出一组输入。例如:
4
alice bob
bob alice
bob alice
coc dod
输出样例:
在这里给出相应的输出。例如:
3
//这个题要求求出入该旅馆最多的一堆情侣;
//使用我们可以通过将字符串相加,然后作为map的键,然后统计次数;
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string a,b;
int max1=0;
map<string,int>x;
while(n--)
{
cin>>a>>b;
if(a<b)a=a+b;
else a=b+a;
x[a]++;
max1=max(max1,x[a]);
}
cout<<max1;
}
//13,14行这里是为了不出现一对情侣因为排列方式不同而导致相加起来不一样的情况,从而进行的判断;
好了,基本的使用方法就是这些,由于我也是初学,写下来也是方便之后的复习,使用要是哪里写的不对,欢迎指出,谢谢;