map应用

Map是STL的一个关联容器,它提供一对一的数据处理能力。其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值,map依关键字而有序的。由于这个特性,在我们处理一对一数据的时候会很方便。下面介绍map的一般用法:

1、数据插入

通过pair插入数据

pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。

pair声明

pair<int,string>p;

pari<double,int>p;

pair<int,string>p(4,"student");

pair<int,pair<int,int> >

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

int main()
{
	map<int,string>student;
	student.insert(pair<int,string>(1,"LeBron"));
	student.insert(pair<int,string>(2,"Kevin"));
	student.insert(pair<int,string>(3,"Blake"));
	student.insert(pair<int,string>(4,"Noah"));
	map<int,string>::iterator iter;
	for(iter=student.begin();iter!=student.end();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	return 0;
}
数组插入

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

int main()
{
	map<int,string>student;
	student[0]="LeBron";
	student[1]="Kevin";
	student[2]="Blake";
	student[3]="Noah";
	map<int,string>::iterator iter;
	for(iter=student.begin();iter!=student.end();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	return 0;
}
value_type插入

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

int main()
{
	map<int,string>student;
	student.insert(map<int,string>::value_type(1,"LeBron"));
	student.insert(map<int,string>::value_type(2,"Kevin"));
	student.insert(map<int,string>::value_type(3,"Blake"));
	student.insert(map<int,string>::value_type(4,"Noah"));
	map<int,string>::iterator iter;
	for(iter=student.begin();iter!=student.end();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	return 0;
}
在通过数组插入数据的情况下,后插入数据与之前插入数据关键字一样时,之前插入数据就会被覆盖,而用另外两种则不会。

2、插入数据检测

pair<map<int,string>::iterator,bool>

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

int main()
{
	map<int,string>student;
	pair<map<int,string>::iterator,bool>test_insert;
	test_insert=student.insert(pair<int,string>(1,"LeBron"));
	if(test_insert.second)
		cout<<"successful!"<<endl;
	else
		cout<<"Failure!"<<endl;
	test_insert=student.insert(pair<int,string>(1,"Kevin"));
	if(test_insert.second)
		cout<<"successful!"<<endl;
	else
		cout<<"Failure!"<<endl;
	map<int,string>::iterator iter;
	for(iter=student.begin();iter!=student.end();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	return 0;
}

3、map遍历(正向与反向)

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

int main()
{
	map<int,string>student;
	student.insert(pair<int,string>(1,"LeBron"));
	student.insert(pair<int,string>(2,"kevin"));
	student.insert(pair<int,string>(3,"Pierce"));
	student.insert(pair<int,string>(1,"Parker"));
	map<int,string>::reverse_iterator iter;
	for(iter=student.rbegin();iter!=student.rend();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	map<int,string>::iterator iter1;
	for(iter1=student.begin();iter1!=student.end();iter1++)
		cout<<iter1->first<<" "<<iter1->second<<endl;
	return 0;
}

也可以通过数组方式遍历

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

int main()
{
	map<int,string>student;
	student.insert(pair<int,string>(1,"LeBron"));
	student.insert(pair<int,string>(2,"kevin"));
	student.insert(pair<int,string>(3,"Pierce"));
	student.insert(pair<int,string>(1,"Parker"));
	map<int,string>::reverse_iterator iter;
	for(iter=student.rbegin();iter!=student.rend();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	map<int,string>::iterator iter1;
	for(iter1=student.begin();iter1!=student.end();iter1++)
		cout<<iter1->first<<" "<<iter1->second<<endl;
	return 0;
}

4、通过关键字进行查找

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

int main()
{
	map<int,string>student;
	student.insert(pair<int,string>(1,"LeBron"));
	student.insert(pair<int,string>(2,"Harden"));
	student.insert(pair<int,string>(3,"Durant"));
	student.insert(pair<int,string>(4,"Blake"));
	map<int,string>::iterator iter;
	iter=student.find(0);
	if(iter!=student.end())
		cout<<iter->first<<" "<<iter->second<<endl;
	else
		cout<<"Failure!"<<endl;
	return 0;
}

5、删除数据,这里要用到erase(),他重载了三个函数,分别是用迭代器删除,用关键字删除以及利用迭代器成块删除。

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

int main()
{
	map<int,string>student;
	if(student.empty())
		cout<<"Empty!"<<endl;
	student.insert(pair<int,string>(1,"LeBron"));
	student.insert(pair<int,string>(2,"Blake"));
	student.insert(pair<int,string>(3,"Nash"));
	student.insert(pair<int,string>(4,"Paul"));
	student.insert(pair<int,string>(5,"Kobe"));
	//erase1
	map<int,string>::iterator iter;
	iter=student.find(5);
	student.erase(iter);
	for(iter=student.begin();iter!=student.end();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	cout<<endl;
	//erase2
	student.erase(0);//删除成功会返回1,否则返回0 
	for(iter=student.begin();iter!=student.end();iter++)
		cout<<iter->first<<" "<<iter->second<<endl;
	//erase3
	cout<<endl;
	student.erase(student.begin(),student.end());//全部删除,亦可以用clear()函数 
	if(student.empty())
		cout<<"Empty!"<<endl; 
	return 0;
}

6、排序

由前面介绍,我们知道map有自动排序功能保证数据是依关键字有序的;但map只是定义了简单数据类型的排序,如果关键字为结构变量或者其他复杂数据类型时,就要自己定义数据大小的判定函数。

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

typedef struct studentInfo
{
	int ID;
	string stu_name;
	bool operator <(const studentInfo &a)const
	{
		if(ID<a.ID)
			return true;
		if(ID==a.ID)
			return stu_name.compare(a.stu_name)<0;
		return false;
	}
}stuInfo;

int main()
{
	map<stuInfo,int>stu;
	stuInfo stuIn;
	stuIn.ID=1;
	stuIn.stu_name="LeBron";
	stu.insert(pair<stuInfo,int>(stuIn,1));
	stuIn.ID=2;
	stuIn.stu_name="Durant";
	stu.insert(pair<stuInfo,int>(stuIn,2));
	map<stuInfo,int>::iterator iter;
	for(iter=stu.begin();iter!=stu.end();iter++)
		cout<<iter->first.ID<<" "<<iter->first.stu_name<<" "<<" "<<iter->second<<endl; 
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值