标准模板库STL---Map

1 介绍

Map是键-值对的集合,Map中所有的元素都是pair,可是使用键作为下标来获取一个元素。Map内部自建一颗红黑树,map中所有元素都会根据元素的键值自动被排序,同时拥有实值value和键值key,pair的第一个元素被视为键值key,第二个值被视为实值value,同时map不允许两个元素有相同的键值
map是一个关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作的节点,对其他节点没有什么影响。
根据key值快速查找,查找的复杂度基本是log(N)

2 声明及初始化

自动建立Key - value的对应。key 和 value可以是任意你需要的类型。

map m;//创建一个名为m的空map对象,其键和值的类型分别为key和value。
map m(m2);//创建m2的副本m,m与m2必须有相同的键类型和值类型。
map m(b,e);//创建map类型的对象m,存储迭代器b和e标记的范围内所有元素的副本,元素的类型必须能转换为pair
map mp;//comp可选,为键值对存放策略,即键的比较函数,默认标准库使用键类型定义的 < 操作符来实现键的比较。所用的比较函数必须在键类型上定义严格的弱排序,可将其理解为键类型数据上的“小于”关系。在实际应用中,键类型必须能定义 < 操作符。对于键类型,其唯一的约束就是必须支持 < 操作符。

数据的基本操作

数据的插入
1、用insert函数插入pair数据,如下所示:

#include 
#include 
using namespace std;

int main()
{
    map mapStudent;
    mapStudent.insert(pair(1,"wangming"));
    mapStudent.insert(pair(2,"lifeng"));
    mapStudent.insert(pair(3,"lihua"));
    map::iterator iter;
    for(iter=mapStudent.begin();iter!=mapStudent.end();iter++)
        cout<first<<' '<second<

2、用insert函数插入value_type数据
每个STL中的类都有value_type这种东西,通俗的说value_type 就是stl容器盛装的数据的数据类型,例如:
vector vec;
vector::value_type x;

map mapStudent;  
mapStudent.insert(map::value_type (1, "student_one"));

3、用数组方式插入

map mapStudent;  
mapStudent[1] = "student_one";  
mapStudent[2] = "student_two";  
mapStudent[3] = "student_three";  

注意:三种数据插入方法的区别:
用insert函数插入数据,在数据的 插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对 应的值。

3、map大小及迭代器:

描述 函数 备注
map的大小 mapStuddent.size();
前向迭代器 for(iter = myString.begin();iter != myString.end();iter++) map::iterator iter;
反向迭代器 for(iter2 = myString.rbegin();iter2 != yString.rend();iter2++) map::reverse_iterator iter2;
数组迭代 for(int i = 1;i <= Length;i++) int Length = myString.size();

4、查找并获取map中的元素
用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。
查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员;

#include 
#include 
#include 
using namespace std;
int main()
{
    map mapStudent;
    mapStudent.insert(pair(1, "student_one"));
    mapStudent.insert(pair(2, "student_two"));
    mapStudent.insert(pair(3, "student_three"));
    map::iterator iter;
    iter = mapStudent.find(1);
    if(iter != mapStudent.end())
       cout<<"Find, the value is "<second<

5、从map中删除元素
移除某个map中某个条目用erase()

iterator erase(iterator it);//通过一个条目对象删除
iterator erase(iterator first,iterator last);//删除一个范围
size_type erase(const Key&key);//通过关键字删除
clear()就相当于enumMap.erase(enumMap.begin(),enumMap.end());

你可能感兴趣的:(标准模板库STL---Map)