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的合用

C++ STL 相关 部分笔记

STL源码剖析 学习笔记

STL学习笔记— —无序容器(Unordered Container)

STL学习笔记--4序列式容器之vector

Effective STL 读书笔记