快速理解unordered_map相关用途

相关概念:
1、unordered_map 是一个关联容器,存储key,value。其中元素并没有特别的次序关系。
2、在unordered_map 内部,元素不会按任何的次序排序,而是通过主键的hash值将元素放置到各个槽(Bucket,也可译为“桶”)中,这样就能够通过主键快速的访问各个对应的元素。

/*哈希查找*/
#include <unordered_map>
#include <iostream>
#include <string>

using namespace std;

void PrintIntDoubleUnOrderedMap(unordered_map<int, double>& m, char* pre)
{
	unordered_map<int, double>::iterator iter;
	cout << pre;
	for (iter = m.begin(); iter != m.end(); ++iter)
		cout << "(" << iter->first << ", " << iter->second << ")" << " ";
	cout << endl;
}

void UnOrderedMapExp1()
{
	unordered_map<int, double> m;
	//没有key,就自动创建
	m[0] = 1.11;
	//普通插入,使用类型转换
	m.insert(unordered_map<int, double>::value_type(1, 2.22));
	//带暗示的插入,pair<int, double>就相当于上面的unordered_map<int ,double>
	m.insert(m.end(), pair<int, double>(2, 3.33));
	PrintIntDoubleUnOrderedMap(m, "插入元素之前的m:");

	//插入一个范围
	unordered_map<int, double> m2;
	m2.insert(unordered_map<int, double>::value_type(3, 4.44));
	m2.insert(unordered_map<int, double>::value_type(4, 5.44));
	m2.insert(unordered_map<int, double>::value_type(5, 6.44));
	m.insert(m2.begin(), m2.end());

	m.emplace(6, 5.55);
	m.emplace_hint(m.end(), 7, 3.09);
	//m.at(5) = 3.333333;

	PrintIntDoubleUnOrderedMap(m, "插入元素之后m:");

	unordered_map<int, double>::iterator iter;
	iter = m.find(4);
	if (iter != m.end())
	{
		cout << "m.find(4): ";
		cout << "(" << iter->first << ", " << iter->second << ")" << endl;
	}

	if (iter != m.end())
	{
		m.erase(iter);
	}
	PrintIntDoubleUnOrderedMap(m, "删除主键为4的元素之后m:");

	//遍历删除
	for (iter = m.begin(); iter != m.end(); ++iter)
	{
		if (iter->first == 2)
		{
			m.erase(iter);
			break;
		}
	}

	//内部数据
	cout << "bucket_count:" << m.bucket_count() << endl;
	cout << "max_bucket_count:" << m.max_bucket_count() << endl;
	cout << "bucket_size:" << m.bucket_size(0) << endl;
	std::cout << "load_factor:" << m.load_factor() << std::endl;
	std::cout << "max_load_factor:" << m.max_load_factor() << std::endl;
	PrintIntDoubleUnOrderedMap(m, "删除主键为2的元素后的foo1:");
	m.clear();
	PrintIntDoubleUnOrderedMap(m, "清空后的foo1:");
}

int main()
{
	UnOrderedMapExp1();
	system("pause");
	return 0;
}

参考链接:https://blog.csdn.net/charles1e/article/details/52042066;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值