C++ unordered_set

本文详细介绍了C++标准模板库中的unordered_set容器。unordered_set通过hash散列方式存储数据,提供快速的搜索、插入和删除操作。文章涵盖了unordered_set的构造、元素添加、查找、桶接口、观察器、元素清除以及其他常用函数,如size、max_size和empty等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

1.定义

2.基本的函数

2.1.unordered_set构造

2.2.添加新的元素(注意无法插入相同元素)

2.3.查找元素

2.4.查找桶接口

2.5.观察器

2.6.清除元素

2.7.其他函数


1.定义

unordered_set本质是使用hash散列的方式存储数据,是一种使用hash值作为key的容器,所以当有频繁的搜索、插入和移除拥有常数时间。unordered_set存储原理是声明一个有n个桶的数据结构,计算加入到unordered_set的新的值hash,然后计算hash%n后的值x,将新的值加入到桶x中。当桶x中已经有了元素,就直接链接在后边。当数据结构中的元素满足一定数量时我们要扩充桶的数量,并重新构建桶结构。

2.基本的函数

2.1.unordered_set构造

  • std::unordered_set<std::string> c:初始化容器
  • std::unordered_set<std::string> c{ "aaa", "bbb", "ccc" }:初始化容器,并将"aaa", "bbb", "ccc"加入到容器中
  • std::unordered_set<std::string> c{ 16 }:初始化容器,并设置16个桶

2.2.添加新的元素(注意无法插入相同元素)

  • c.insert("dddd"):向容器添加元素”dddd"
  • a.insert({ "aaa","bbbb","cccc" }):向容器添加元素"aaa","bbbb","cccc"
  • a.insert(b.begin(), b.end()):b是一个存储着和a相同类型元素的向量,可将b中所有元素添加到a中

2.3.查找元素

  • a.find("eeee"):查找元素"eeee",返回结果为a.end()则表明没有找到,否则返回所对应元素
  • a.count("eeee"):查找元素"eeee"在a中有几个(由于unordered_set中没有相同的元素,所以结果通常为0或1)

2.4.查找桶接口

  • a.bucket_count():返回数据结构中桶的数量
  • a.bucket_size(i):返回桶i中的大小
  • a.bucket(“eeee"):返回元素"eeee"在哪个桶里

2.5.观察器

  • a.hash_function()("aaa"):返回"aaa"所对应的hash值
  • a.key_eq()("aaa","aaaa") :当元素相同时返回true,否则返回false

2.6.清除元素

  • a.clear():清除a中所有元素
  • a.erase("aaa"):清除元素"aaa"

2.7.其他函数

  • a.size():返回a中总的元素个数
  • a.max_size():返回a中最大容纳元素
  • a.empty():判断a中是否为空

(未完待续)

 

unordered_setC++标准库中的一个容器类,它提供了一种存储唯一元素的无序集合。 unordered_set使用哈希表来实现元素的存储和查找,因此它具有快速的插入、删除和查找操作的特点。通过使用哈希函数,unordered_set可以将元素分布在不同的存储桶中,从而实现高效的查找。 在unordered_set中,每个元素被视为键值(key),并且它们是唯一的,不能重复。 unordered_set中的元素的顺序是不确定的,它们不按照插入的顺序进行存储。 引用提供了一些unordered_set的常用成员函数和迭代器的使用方法。可以使用begin()和end()函数来获取unordered_set的迭代器的起始位置和结束位置。cbegin()和cend()函数返回的是const迭代器,它们不允许修改unordered_set中的元素。local_iterator则用于遍历unordered_set中某个特定存储桶中的元素。 总结来说,unordered_set是一个存储唯一元素的无序集合的容器类,它使用哈希表来实现元素的存储和查找。在使用unordered_set时,可以利用迭代器来访问和操作其中的元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++常用语法——unordered_set](https://blog.youkuaiyun.com/LiuXF93/article/details/120899401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++ STL 之 unordered_set 使用(包括unordersd_map)](https://blog.youkuaiyun.com/qq_32172673/article/details/85160180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值