STL学习笔记map
Posted Keep--Silent
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL学习笔记map相关的知识,希望对你有一定的参考价值。
C++ Maps是一种关联式容器,包含“关键字/值”对
map<容器1,容器2>,这里的容器可以是变量。
如下校选题:
题目大意:有n条聊天记录,找出发言最多的人(如果发言最多的不只一个人,找出发言最多的人中最早发言的那个)。
如果不会map,思路:
开一个很大的数组作为散列表
写一个合理的哈希函数
将字符串转成数组下表插入哈希表
map思路:
两个map容器:
map<string,int>say;
map<string,int>time;
say[first]=second,表示first这个人说了second次话
time[first]=second,表示first这个人最早说话在second(second越小,说明这个人说话越早)
核心代码部分:
for(i=0;i<n;i++){
cin>>name;
if(time[name]==0)time[name]=i+1;
say[name]++;
if(say[name]>say[ans]||say[name]==say[ans]&&time[name]<time[ans])
ans=name;
}
完整代码:
#include <iostream>
#include<cstdio>
#include<vector>
#include <map>
using namespace std;
#define ll long long
int main(int argc, char** argv) {
int n,i;
string name,s;
string ans="";
char ss1[100],ss2[200];
map<string,int>say;
map<string,int>time;
char ch;
cin>>n;
getchar();
for(i=0;i<n;i++){
scanf("%[^':']s",ss1);
scanf("%[^'\\n']s",ss2);
getchar();
name=ss1;
if(ans=="")ans=name;
if(time[name]==0)time[name]=i+1;
say[name]++;
if(say[name]>say[ans]||say[name]==say[ans]&&time[name]<time[ans])
ans=name;
}
cout<<ans<<endl;
return 0;
}
结果:
以上是关于STL学习笔记map的主要内容,如果未能解决你的问题,请参考以下文章
STL学习笔记vector与map的合用vector与vector的合用