STL map的用法

map是STL的一个关联容器,它提供一对一的数据处理能力(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)


一.插入
#include <map>
#include <iostream>
using namespace std;


int main() {
	pair<map<int, string>::iterator, bool> insert_pair;
	map<int, string> cls;


	//1.使用pair插入
	insert_pair = cls.insert(pair<int, string>(1, "zhangsan"));
	insert_pair = cls.insert(pair<int, string>(2, "lisi"));
	insert_pair = cls.insert(pair<int, string>(2, "wangwu"));
	//判断是否插入成功
	if (insert_pair.second == true)
		cout<<"id:"<<insert_pair.first->first<<", name:"<<insert_pair.first->second.c_str()<<"插入成功"<<endl;
	else
		cout<<"id:"<<insert_pair.first->first<<", name:"<<insert_pair.first->second.c_str()<<"插入失败"<<endl;


	cout<<"使用pair插入后:"<<endl;
	for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
		cout<<iter->first<<", "<<iter->second.c_str()<<endl;


	//2.使用value_type插入
	cout<<endl<<"使用value_type插入后:"<<endl;
	cls.insert(map<int, string>::value_type(3, "zhaoliu"));
	for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
		cout<<iter->first<<", "<<iter->second.c_str()<<endl;


	//3.使用数组下标插入(该方法和前两种的区别是,如果键已经存在,则会覆盖对应的值)
	cout<<endl<<"使用数组下标插入后:"<<endl;
	cls[3] = "sunqi";
	for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
		cout<<iter->first<<", "<<iter->second.c_str()<<endl;


	return 0;
}

二.遍历
#include <map>
#include <iostream>
using namespace std;


int main() {
	map<int, string> cls;


	//1.使用正向迭代器遍历
	cout<<"正向遍历:"<<endl;
	cls.insert(pair<int, string>(1, "zhangsan"));
	cls.insert(pair<int, string>(2, "lisi"));
	for (map<int, string>::iterator iter = cls.begin();iter != cls.end();iter++)
		cout<<iter->first<<", "<<iter->second.c_str()<<endl;


	//2.使用反向迭代器遍历
	cout<<endl<<"反向遍历:"<<endl;
	for (map<int, string>::reverse_iterator iter = cls.rbegin();iter != cls.rend();iter++)
		cout<<iter->first<<", "<<iter->second.c_str()<<endl;


	//3.使用数组遍历(有一定的局限性)
	cout<<endl<<"数组遍历:"<<endl;
	for (int i = 0; i < cls.size();i++)
		cout<<i<<", "<<cls[i].c_str()<<endl;


	return 0;
}

三.删除
map<int, string> m;

m.insert(pair<int, string>(1, "zhangsan"));
m.insert(pair<int, string>(2, "lisi"));
m.insert(pair<int, string>(3, "wangwu"));
m.insert(pair<int, string>(4, "zhaoliu"));


//1.使用迭代器删除一个元素
map<int, string>::iterator iter = m.find(2);
m.erase(iter);


//2.使用关键字删除一个元素
m.erase(1);
		
//3.删除多个元素
m.erase(m.begin(), m.end());
	
//4.删除符合条件的元素
//删除字符串中包含"li"的元素(即删除第2和第四个元素)
for (map<int, string>::iterator iter = m.begin();iter!=m.end();)
{
	string::size_type index = iter->second.find("li");
	if (index != string::npos)
		iter = m.erase(iter);
	else
		iter++;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值