关于map的入门使用
1,map简介
map是STL的一个关联容器,它提供一对一的hash。
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个班级中,每个学生的学号跟他的姓名就存在著一对一映射的关系。
在这里插入图片描述
2.简单翻译
map实际上就是一种集合,我们都知道集合内的元素是不重复的,所以,在map里的元素都是独一无二的。
map函数的基础模板是 map<key , value>m;
每个map中包括一个key和一个value,他们可以是各种类型如int ,long long,string…
key相当于集合中的元素,value是key对应的值,他们成一一对应的关系,也就是映射关系。
3.map的基础操作
首先 map 的使用需要 #include
// 第一 种 用insert函數插入pair
mapStudent.insert(pair<int, string>(000, “student_zero”));
// 第二种 用"array"方式插入
mapStudent[123] = “student_first”;
mapStudent[456] = “student_second”;
而我更喜欢用的是第二种,第二种是一种类似数组的形式,它可以对value的值进行修改,而第一种只能建立一种僵硬的映射。
对于map函数的输出形式
1.m.find()
c++ 里面的map容器的迭代器里面 有个first 和 second
例如:
map<string, int> m;
m[3] = 1;
m.find()map<int , int>::iterator it;
it=m.find(3);
it->first; // 这个是 int 值是 3
it->second; //这个是 int 值是 1
find函数是查找key,然后用->first输出key,用->second输出value。
如果你看过模板的话,应该知道m.find()的返回值是迭代器位置。
而如果要使用迭代器就要写一段说明:
map<int,int>m::iterator it
这个it可以作为接受点:
it=m.find(1);
演示案例:
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
map<int,int>m;
map<int,int>::iterator it;
int main()
{
m[2]=3;
m[3]=1;
m[1]=9;
m[6]=5;
it=m.find(6);
cout<<it->first<<' '<<it->second<<endl;
return 0;
}
还有一个输出方法如下:
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
map<int,int>m;
map<int,int>::iterator it;
int main()
{
m[2]=3;
m[3]=1;
m[1]=9;
m[6]=5;
cout<<m[6]<<' '<<m[2]<<endl;
return 0;
}
也就是直接输出。
最后,还是补充点常见的操作:
begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true end() 返回指向map末尾的迭代器 equal_range() 返回特殊条目的迭代器对 erase() 删除一个元素 find() 查找一个元素 get_allocator() 返回map的配置器 insert() 插入元素 key_comp() 返回比较元素key的函数 lower_bound() 返回键值>=给定元素的第一个位置 max_size() 返回可以容纳的最大元素个数 rbegin() 返回一个指向map尾部的逆向迭代器 rend() 返回一个指向map头部的逆向迭代器 size() 返回map中元素的个数 swap() 交换两个map upper_bound() 返回键值>给定元素的第一个位置 value_comp() 返回比较元素value的函数