C++容器之无序多集(std::unordered_multiset)

ops/2024/10/15 18:10:56/

目录

  • 1 概述
  • 2 使用实例
  • 3 接口使用
    • 3.1 construct
    • 3.2 assigns
    • 3.3 iterators
    • 3.4 capacity
    • 3.5 find
    • 3.6 count
    • 3.7 equal_range
    • 3.8 emplace
    • 3.9 emplace_hint
    • 3.10 insert
    • 3.11 erase
    • 3.12 clear
    • 3.13 swap
    • 3.14 bucket_count
    • 3.15 max_bucket_count
    • 3.16 bucket_size
    • 3.17 bucket
    • 3.18 load_factor
    • 3.19 max_load_factor
    • 3.20 rehash
    • 3.21 reserve
    • 3.22 hash_function
    • 3.23 key_eq
    • 3.24 get_allocator

1 概述

  无序多集是不按特定顺序存储元素的容器,允许根据单个元素的值快速检索这些元素,与无序集容器非常相似,但允许不同的元素具有相同的值。
  在一个无序的多重集合中,一个元素的值同时也是用来识别它的键。键是不可变的,因此,无序的多重集中的元素不能在容器中修改一次,它们可以插入和删除。
  在内部,undered_multiset中的元素没有任何特定的排序,而是根据它们的哈希值组织到桶中,以允许直接根据它们的值快速访问各个元素(平均具有恒定的平均时间复杂度)。
  具有等效值的元素被分组在同一个bucket中,并且迭代器(请参阅equal_range)可以遍历所有元素。
  容器中的迭代器至少是前向迭代器。

容器特性:

  • 关联性 关联容器中的元素由它们的键(Key)引用,而不是由它们在容器中的绝对位置引用。
  • 无序性 无序容器使用哈希表来组织其元素,哈希表允许通过其键快速访问元素。
  • 集合 元素的值也是用来识别它的键(Key)。
  • 多值性 容器中的多个元素可以具有等效的键
  • 分配器感知 容器使用分配器对象来动态处理其存储需求。
  • 其类图如下:
    在这里插入图片描述

2 使用实例

void UnorderedMultiSet::rehash()
{std::unordered_multiset<std::string> a;a.rehash(12);TEST_ASSERT_EQUALS(true, a.bucket_count() > 12)a.insert("James");a.insert("Tom");a.insert("Jim");a.insert("Rose");a.insert("Geore");a.insert("Geore");uint32_t bucket_count = a.bucket_count();a.rehash(11);TEST_ASSERT_EQUALS(bucket_count, a.bucket_count())a.rehash(5);TEST_ASSERT_EQUALS(true, a.bucket_count() < bucket_count)
}

3 接口使用

3.1 construct

template<class T>
T merge_multiset(T const & a, T const& b)
{T t(a);t.insert(b.begin(), b.end());return t;
}void UnorderedMultiSet::construct()
{std::unordered_multiset<int> a;std::unordered_multiset<int> b({ 1, 2, 3, 3 });std::unordered_multiset<int> c({ 4, 5, 6, 6 });std::unordered_multiset<int> d(b);std::unordered_multiset<int> e(merge_multiset(b, c));std::unordered_multiset<int> f(e.begin(), e.end());TEST_ASSERT_EQUALS(true, a.empty())TEST_ASSERT_EQUALS(4, b.size())TEST_ASSERT_EQUALS(4, c.size())TEST_ASSERT_EQUALS(4, d.size())TEST_ASSERT_EQUALS(8, e.size())TEST_ASSERT_EQUALS(8, f.size())
}

3.2 assigns

void UnorderedMultiSet::assigns()
{std::unordered_multiset<int> a;std::unordered_multiset<int> b;std::unordered_multiset<int> c;std::unordered_multiset<int> d;a = { 1, 2, 3, 3 };b = { 4, 5, 6, 6 };c = merge_multiset(a, b);d = c;TEST_ASSERT_EQUALS(4, a.size())TEST_ASSERT_EQUALS(4, b.size())TEST_ASSERT_EQUALS(8, c.size())TEST_ASSERT_EQUALS(8, d.size())
}

3.3 iterators

void UnorderedMultiSet::iterators

http://www.ppmy.cn/ops/42630.html

相关文章

数据库(vb.net+OleDB+Access)简易学生信息管理系统

在我们日常生活当中&#xff0c;数据库一词往往离不开我们的编程界&#xff0c;在学校、仓库等方面起着存储数据及数据关系作用的文件。相较于Excel&#xff0c;Access可以存储无限多的记录&#xff0c;内容也十分丰富&#xff0c;例如文本、数字、日期、T&F等。而且不需要…

截图工具PixPin(比Snipaste更强大)

PixPin官网链接&#xff1a;https://pixpinapp.com/ 最近新出的一款截图工具PixPin&#xff0c;比Snipaste功能多一些。在Snipaste功能基础上&#xff0c;还支持长截图&#xff0c;截动图&#xff0c;文本识别。

【React】Ant Design 5.x版本table scroll滚动条样式自定义

新版里table的滚动条样式由:scrollbar-width、scrollbar-color接管&#xff0c;导致之前的伪类方式失效&#xff01; 环境 antd: ^5.14.1react: ^18 解决方案&#xff1a; 若想延续伪类方式修改滚动条样式&#xff0c;可以在定义伪类样式文件里加入以下片段&#xff1a; .a…

KubeKey 安装 K8s

官网教程 在 Linux 上以 All-in-One 模式安装 KubeSphere 步骤 1&#xff1a;准备 Linux 机器 若要以 All-in-One 模式进行安装&#xff0c;您仅需参考以下对机器硬件和操作系统的要求准备一台主机。 硬件推荐配置 操作系统最低配置Ubuntu 16.04, 18.04, 20.04, 22.042 核 …

Mac启用三指拖移

1. 简介 在使用mac的用户中大部分都会开启三指拖移功能&#xff0c;它能大大简化选中文字、修改窗口大小、拖动窗口等操作。 什么是三指拖移&#xff1f; 三指拖移是macOS触控板的一种手势功能&#xff0c;允许用户用三根手指在触控板上进行拖动操作&#xff0c;而无需按住触…

Tower在深度学习中的概念,tower没有确切定义

在论文UniTS中&#xff0c;来自Havard的工作。 tower更像是针对一个task的组件 tower这个概念貌似在REC&#xff08;recommendation&#xff09;推荐系统中使用较多 deep learning - What is a tower? - Data Science Stack Exchange https://developers.google.com/machin…

欣赏倪诗韵青桐断纹古琴很罕见:万中无一。

欣赏倪诗韵青桐断纹古琴很罕见&#xff1a;万中无一。龙池侧签海门倪诗韵制&#xff0c;带收藏证书此琴断纹优美如江面波光粼粼&#xff0c;为流水蛇腹断&#xff0c;是倪老师作品精品中的精品。细心的朋友可以看出倪老师在这张琴上题字非常小心认真。用一个词来形容——万中无…

go学习笔记-从圣经中抄录的接口值的思考

接口值 接口值&#xff0c;由两个部分组成&#xff0c;一个具体的类型和那个类型的值 下面4个语句中&#xff0c;变量w得到了3个不同的值。&#xff08; 开始和最后的值是相同的&#xff09; var w io.Writer w os.Stdout w new(bytes.Buffer) w nil var w io.Writer var…