map的常用用法详解

map的定义

单独定义一个map:

map<typename1, typename2> mp;

如果是字符串到整型的映射,必须使用string而不能使用char数组:

map<string, int> mp;

这是因为char数组作为数组,是不能被作为键值的。

map容器内元素的访问

  1. 通过下标访问
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['c'] = 20;
	mp['c'] = 30; // 20被覆盖
	printf("%d\n", mp['c']); // 输出30
	return 0;
}
  1. 通过迭代器访问
map<typename1, typename2>::iterator it;

typename1和typename2就是定义map时填写的类型,这样就得到了迭代器it。
map可通过使用it->first来访问键,使用it->second来访问值。

#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['m'] = 20;
	mp['r'] = 30;
	mp['a'] = 40;
	for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++)
	{
		printf("%c %d\n", it->first, it->second);
	}
	return 0;
}

输出为:

a 40
m 20
r 30

这里有一个有趣的现象:map会以键从小到大的顺序自动排序。这是由于map内部是使用红黑树实现的,在建立映射的过程中会自动实现从小到大的排序功能。

map常用函数实现

  1. find()
    find(key)返回键为key的映射的迭代器。
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['a'] = 1;
	mp['b'] = 2;
	mp['c'] = 3;
	mp<char, int>::iterator it = mp.find('b');
	printf("%c %d", it->first, it->second);
	return 0;
}

输出结果:

b 2
  1. erase()
  • 删除单个元素
    mp.erase(it),it为需要删除的元素的迭代器。
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['a'] = 1;
	mp['b'] = 2;
	mp['c'] = 3;
	map<char, int>::iterator it = mp.find('b')
	mp.erase(it);
	for(map<char, int>::iterator it = mp.begin(); it!=mp.end(); it++)
	{
		printf("%c %d", it->first, it->second);
	}
	return 0;
}

输出内容:

a 1
c 3
  • mp.erase(key),key为欲删除的映射的键。
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['a'] = 1;
	mp['b'] = 2;
	mp['c'] = 3;
	mp.erase('b'); //删除键为b的映射,即b 2
	for(map<char, int>::iterator it = mp.begin(); it!=mp.end(); it++)
	{
		printf("%c %d\n", it->first, it->second);
	}
	return 0;
}

输出内容如下:

a 1
c 3
  • 删除一个区间内的所有元素
    mp.erase(first, last),其中first为需要删除的区间内的起始迭代器,而last则为需要删除的区间内的末尾迭代器的下一个地址,也即为删除左闭右开的区间[first, last)。
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['a'] = 1;
	mp['b'] = 2;
	mp['c'] = 3;
	map<char, int>::iterator it = mp.find('b'); //令it指向键为b的映射
	mp.erase(it, mp.end()); //删除it之后的所有映射,即b 2和c 3
	for(map<char, int>::iterator it = mp.begin(); it!=mp.end; it++)
	{
		printf("%c %d", it->first, it->second);
	}
	return 0;
}

输出结果:

a 1
  1. size()
    size()用来获得map中映射的对数。
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['a'] = 10;
	mp['b'] = 20;
	mp['c'] = 30;
	printf("%d\n", mp.size()); //3对映射
	return 0;
}

输出结果:

3
  1. clear()
    clear()用来清空map中的所有元素。
#include <stdio.h>
#include <map>

using namespace std;

int main()
{
	map<char, int> mp;
	mp['a'] = 1;
	mp['b'] = 2;
	mp.clear(); //清空mp
	printf("%d\n", mp.size());
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值