C++ STL map用法简要介绍

关于STL map的使用

知识补充

首先,补充一下pair类型的访问,使用first,second。

pair<int, double> p1;  //使用默认构造函数
p1.first = 1;
p1.second = 2.5;
cout << p1.first << ' ' << p1.second << endl;

map声明

map<int, int> mymap;

map插入

两种比较方便的办法

mymap.insert(pair<int, int> (1,2));
mymap[1] = 2;

注意value的值会覆盖

mymap[1] = 3;	//现在key=1的value值是3

map遍历

map<int, int>::iterator iter;
for(iter=mmap2.begin(); iter!=mmap2.end(); iter++)
{
	cout << iter->first <<"  " << iter->second << endl;
}

map快速查询

也是有方式,一种根据迭代器

iter = mmap2.find(100);
if(iter==mmap2.end())
{
	cout << "no" << endl;
}

一种根据数组访问

cout << mymap[100] << endl;	//若key不存在,返回0

map修改

拿到访问之后,直接修改

mymap[1] = 2;	//修改key=1的value为2

map删除

有两种方式,一种是迭代器删除,一种是关键字删除

//迭代器刪除
iter = mmap2.find("123");
mmap2.erase(iter);

如果刪除了會返回1,否則返回0

//关键字删除
int n = mmap2.erase("r123");

map清空

mmap2.erase(mmap2.begin(), mmap2.end());

map排序

针对key排序

插入的时候,默认按照key升序排序。

想要变成降序排序排序(目前还是针对key),在声明的地方改成:

map<int, int, greater<int> > mmap2;	
//默认是less<int>

当然啦,可以自己写一个自定义的排序函数,然后将函数名作为第三个参数传入。

针对value排序

这是比较麻烦的,需要写好自定义排序函数,还需要将map的内容转到vector中。

//自定义排序函数
bool cmp(pair<int,int> a, pair<int,int> b)
{
	return a.second > b.second;
}
int main()
{
	mmap2.insert(pair<int, int> (1,2));
	mmap2.insert(pair<int, int> (3,4));
	mmap2.insert(pair<int, int> (5,6));

	vector<pair<int, int> > vec1(mmap2.begin(), mmap2.end());	//转到vector中
	sort(vec1.begin(), vec1.end(), cmp);

	for(int i=0; i<vec1.size(); i++)
	{
		cout << vec1[i].first << "  " << vec1[i].second << endl;
	}

	return 0;
}

当key是结构体或者是类的时候

记得为结构体或者类写排序函数,否则map不知道如何排序

其余的,访问等操作均相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值