11.4 无序容器

无序关联容器使用哈希函数和关键字类型的==运算符组织元素。

使用无序容器

#include<iostream>
#include<unordered_map>

using namespace std;

int main() 
{
	unordered_map<string, int> words;
	string word;
	while (cin>>word)
	{
		if (!words.insert(pair<string,int>( word,1)).second )
		{
			++words[word];
		}
	}
	for (auto i : words)
		cout << i.first << "  " << i.second << endl;
	return 0;
}

使用的方法也和正常的map是一致的。

但是需要注意的是:提供和有序容器相同的操作(find、insert等),输出可能不同(不按字典序排序,按哈希函数排序 ),有序和无序通常可以互相替换。

管理桶

无序容器在存储上组织为一组桶,每个桶保存0~多个元素。无序容器使用一个哈希函数将元素映射到桶。每个桶保存一个特定哈希值,如果允许重复关键字,则具有相同关键字的元素也在一个桶中。

无序容器性能依赖于哈希函数的质量和桶的数量和大小。

哈希函数能将特定的值映射到唯一的桶。也可以将不同关键字的元素映射到相同的桶。当一个桶保存多个元素时,采用顺序搜索插入元素。(即桶外无序,桶内顺序)

//桶接口
c.bucket_count() //正使用桶数目
c.max_bucket_count() //容器对桶数目的容量
c.bucket_size(n) //第n个桶元素数
c.bucket(k) //关键字k在哪个桶中

//桶迭代
local_iterator //访问桶中元素的迭代器类型
const_local_iterator //const版本
c.begin(n),c.end(n)
c.cbegin(n),c.cend(n)

//哈希策略
c.load_factor() //每个桶平均数量,返回float值
c.max_load_factor() //c维护平均桶大小,返回float值。c会在需要的时候添加新桶,使得c.load_factor<=c.max_load_factor.
c.rehash(n) //重组存储,bucket_count>=n&&bucket_count*max_load_factor>size
c.reserve(n) //重组存储,c可以保存n个元素且不rehash

无序容器使用关键字类型的==运算符比较元素,通过hash<key_type>类型的对象来生成每个元素的哈希值。标准库为内置类型替供了hash模板。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值