可执行代码:【①遍历map数组来找最大值②每次循环都提取出来最大值,循环结束后直接输出】
一、共同点:
map<数据类型,数据类型> mp和unordered_map<数据类型,数据类型> ump的定义方式和用法完全相同数组都是:mp[key]=count;ump[key]=count;
//key指数组下标,count指该下标对应的值。相当于int a[i]=7。key对应i,count对应7.
二、区别:
map<数据类型,数据类型> mp和unordered_map<数据类型,数据类型> ump的区别是:
1.实现的逻辑【这个看看就行】:
- map:红黑树 → 有序,慢
- unordered_map:哈希表 → 无序,快
2.算法比赛时候的选用:
-
只需要统计次数、存映射、查有没有 → 用 unordered_map,更快不超时
-
需要按 key 从小到大遍历、自动排序 → 只能用 map
-
当n超过1e5的数据长度时只能用unordered_map
三、例题:
题目:
可执行代码:【①遍历map数组来找最大值②每次循环都提取出来最大值,循环结束后直接输出】
cpp
//①遍历map数组来找最大值
#include <bits/stdc++.h>
using namespace std;
long long n,m;
const int N=1e5+10;
long long a[N];
unordered_map<long long,long long> mp;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
mp[a[i]+1]++;
mp[a[i]]++;
mp[a[i]-1]++;
}
for(auto it=mp.begin();it!=mp.end();it++){
if(it->second>m) m=it->second;
}
cout<<m;
return 0;
}
//②每次循环都提取出来最大值,循环结束后直接输出
#include <bits/stdc++.h>
using namespace std;
long long n,m;
const int N=1e5+10;
long long a[N];
unordered_map<long long,long long> mp;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
mp[a[i]+1]++;
mp[a[i]]++;
mp[a[i]-1]++;
m=max(m,mp[a[i]+1]);
m=max(m,mp[a[i]]);
m=max(m,mp[a[i]-1]);
}
cout<<m;
return 0;
}
