C++ STL map

Map是什么

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。

Map头文件

#include <map>

Map的常用构造函数

map对象是模板类,需要关键字存储对象两个模板参数:

map<int,string> stuMap;		//关键字为int数据类型,值为string数据类型

Map数据的三种插入方式(+正向遍历)

1.用insert函数插入pair数据

#include <iostream>
#include <map>
#include <cstring>
using namespace std;

int main()
{
	map<int,string> stuMap;
	stuMap.insert(pair<int,string>(1,"student_one"));
	stuMap.insert(pair<int,string>(2,"student_two"));
	
	map<int,string>::iterator iter;
	for(iter=stuMap.begin();iter!=stuMap.end();iter++)
	{
		cout<<iter->first<<' '<<iter->second<<endl;
	}
	
	return 0;
}

2.用insert函数插入value_type数据

#include <iostream>
#include <map>
#include <cstring>
using namespace std;

int main()
{
	map<int,string> stuMap;
	stuMap.insert(map<int,string>::value_type(1,"student_one"));
	stuMap.insert(pair<int,string>(2,"student_two"));
	
	map<int,string>::iterator iter;
	for(iter=stuMap.begin();iter!=stuMap.end();iter++)
	{
		cout<<iter->first<<' '<<iter->second<<endl;
	}
	
	return 0;
}

3.用数组方式插入数据

#include <iostream>
#include <map>
#include <cstring>
using namespace std;

int main()
{
	map<int,string> stuMap;
	stuMap[1]="student_one";
	stuMap.insert(pair<int,string>(2,"student_two"));
	
	map<int,string>::iterator iter;
	for(iter=stuMap.begin();iter!=stuMap.end();iter++)
	{
		cout<<iter->first<<' '<<iter->second<<endl;
	}
	
	return 0;
}

Map(反向遍历)

map<int,int>::reverse_iterator r_iter;  
for (r_iter = map.rbegin(); // binds r_iter to last element  
      r_iter != map.rend(); // rend refers 1 before 1st element  
      ++r_iter) // decrements iterator one element  
    cout << *r_iter << endl; // prints 9,8,7,...0  

Map的大小

stuMap.size();

查找和获取Map中的元素的两种方法

1.用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了

stuMap.count(1);

2.用find函数来定位数据出现位置,它会返回一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

#include <iostream>
#include <map>
#include <cstring>
using namespace std;

int main()
{
	map<int,string> stuMap;
	stuMap[1]="student_one";
	stuMap.insert(pair<int,string>(2,"student_two"));
	
	map<int,string>::iterator iter;
	iter=stuMap.find(1);
	if(iter != stuMap.end())
	{
		cout<<"Find,the key is "<<iter->first<<",the value is " <<iter->second<<endl;
	}
	else
	{
		cout<<"Do not find"<<endl;
	}
	
	return 0;
}

从Map中删除元素

移除某个map中的某个条目用erase()
该成员方法的定义如下:

iterator erase (iterator it); //通过一个条目对象删除
iterator erase (iterator first,iterator last); //删除一个范围
size_type erase(const Key&key); //通过关键字删除

#include <iostream>
#include <map>
#include <cstring>
using namespace std;

int main()
{
	map<int,string> stuMap;
	stuMap[1]="student_one";
	stuMap.insert(pair<int,string>(2,"student_two"));
	
	map<int,string>::iterator iter;
	//用迭代器删除
	iter=stuMap.find(1);
	stuMap.erase(iter);
	
	//用关键字删除
	int n=stuMap.erase(2);
	
	 //用迭代器成片地删除
	 stuMap.erase(stuMap.begin(),stuMap.end()); 
	
	for(iter=stuMap.begin();iter!=stuMap.end();iter++)
	{
		cout<<iter->first<<"  "<<iter->second<<endl;
	}
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值