map和unordered_map

一、map

1. 使用map 要先包含头文件 #include <map>;
2. map 内部的实现原理:
	map内部实现了一个红黑树,该结构具有自动排序的功能,因此map内部的所有元素都是有序的,
	红黑树的每一个节点都代表着map的一个元素,
	因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行这样的操作,
	故红黑树的效率决定了map的效率。
3. 优点:
	有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作。
	【注】:这个有序,指的是下标的有序。
	红黑树,内部实现一个红黑书使得map的很多操作在lgn的时间复杂度下就可以实现,
	因此效率非常的高。
4. map常用函数和定义,百度即可。

二、unordered_map

同理:
1. #include <unordered_map>
2. 内部实现原理: 使用了哈希表,因此元素的排序是杂乱的,切不可以事先分配数量
3. 优点:比map更高效,且查找时间复杂度为O(1);

三、map和unordered_map使用时,不同之处(不清楚为什么)

1. 问题:
// 不懂:
// 遍历m1所有元素
	// map 是可以这样操作的
	map<int, int>::iterator iter;
	for (iter = m1.begin(); iter != m1.end(); iter++)
	{
		cout << iter->first << " : " << iter->second << endl;
	}
	// unordered_map 会出错:在for循环的“=”处,提示:没有匹配的操作数
	unordered_map<int, int>::iterator iter = nullptr;
	for (iter = m2.begin(); iter != m2.end(); iter++)
	{
		cout << iter->first << " : " << iter->second << endl;
	}
	// 如果在for循环里面定义iter,就不会报错。 不太理解哪里出了问题
	for (unordered_map<int,int>::iterator iter = m2.begin(); iter != m2.end(); iter++)
	{
		cout << iter->first << " : " << iter->second << endl;
	}

2.总结:
2.1 在遍历时,统一使用auto
for(auto iter = m.begin(); iter!=m.end(); ++iter)
{
}
2.2 新的for循环 // i代表m中的元素,访问用'.'
for(auto i : m)
{
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值