STL映射(map)用法

映射:映射是指兩個集合之間的元素的相互對應關係。通俗得將,就是一個元素對應另外一個元素。

比如有一個姓名的集合{“Tom”,“jone”,“Mary”},班級集合{1,2}。姓名與班級之間可以有如下映射關係:

在這裏插入圖片描述
我們稱其中的姓名集合爲 關鍵字集合(key),班級集合爲 值集合(value)

在C++中我們常用映射是map.

頭文件
#include< map >
using namespace std;

構造聲明
map< T1,T2 >m
定義了一個名爲m的從T1類型到T2類型的映射。初始的時候m是空映射。

比如map<string,int>m構建了一個字符串到整數的映射,這樣我們可以吧一個字符串和一個整數關聯起來。

在這裏插入圖片描述

具體操作:

1.插入一對映射(通常用下標)
插入:dict[key]=value

例如:map< string,int>dict

#include<cstdio>
#include<map>
#include<string>
using namespace std; 
int main()
{
	map<string,int>dict;
	dict["Tom"]=156554648;
	dict["jony"]=14545649;
	printf("%d %d",dict["Tom"],dict["jony"]);
	return 0;
}

在這裏插入圖片描述
2.判斷關鍵字是否存在
如果想知道某個關鍵字是否被映射過,可以直接用count()函數,如果關鍵字存在返回1,否則返回0;
示例:

#include<cstdio>
#include<map>
#include<string>
using namespace std; 
int main()
{
	map<string,int>dict;
	dict["Tom"]=2350185;
	dict["jony"]=2350186;
	if(dict.count("Tom"))
	printf("Tom的學號是:%d",dict["Tom"]);
	else
	printf("Tom不存在"); 
	return 0;
}

結果:
在這裏插入圖片描述
3,遍歷
映射的遍歷也是需要藉助迭代器,如果想了解迭代器可以看我的上一篇文章set的應用
我們用一>來獲取值
it一>first和(*it).first的效果是一樣的,就是獲取迭代器it指向的pair裏first成員的值

注意:first是關鍵字,second是對應的值
遍歷map是按照關鍵字從小到大遍歷的,和set有共性

示例:

#include<bits/stdc++.h>
using namespace std; 
int main()
{
	int t;
	map<string,int>dict;
	dict["Tom"]=156554648;
	dict["jony"]=14545649;
	t=dict.size();
	map<string,int>::iterator it;
	for(it=dict.begin();it!=dict.end();it++)
	cout<<it->first<<"->"<<it->second<<endl; //first是關鍵字,second是對應的值
	return 0;
}

結果:
在這裏插入圖片描述
STL輸出字符串用C語言可以這樣來輸出
printf("%s->%d\n",(it->fisrt).c_str(),it->second)

4.map套用set
例如:我們將每一個班級的同學放在一個集合,我們建立一個全校同學的映射關係(要防止不同班級之間有同名的現象)
定義一個:
map< int ,set< string> >s;
(int 存放班級編號,string存放一個班的學生名稱)
插入學生
比如2班的yuhaoran同學:s[2].insert(“yuhaoran”);
查詢學生:(查詢yuhaoran是不是二班的):
s[2].count(“yuhaoran”);
刪除學生:
s[2].erase(“yuhaoran”);

5.map套map
例如:如果存在同班同名,我們要統計同名的人的個數
定義一個:
map< int ,map< string,int> >s
比如二班來了一個yuhaoran:
s[2] [“yuhaoran”]++;
問二班有第三個yuhaorang
cout<< s[2][“yuhaoran”]<<endl;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章