c++11 标准模板(STL)(std::unordered_multiset)(五)
迪丽瓦拉
2025-05-31 16:42:22
0
定义于头文件 
template<

    class Key,
    class Hash = std::hash,
    class KeyEqual = std::equal_to,
    class Allocator = std::allocator

> class unordered_multiset;
(1)(C++11 起)
namespace pmr {

    template               class Hash = std::hash,
              class Pred = std::equal_to>
    using unordered_multiset = std::unordered_multiset                                    std::pmr::polymorphic_allocator>

}
(2)(C++17 起)

unordered_multiset 是关联容器,含有可能非唯一 Key 类型对象的集合。搜索、插入和移除拥有平均常数时间复杂度。

元素在内部并不以任何顺序排序,只是被组织到桶中。元素被放入哪个桶完全依赖其值的哈希。这允许快速访问单独的元素,因为一旦计算哈希,它就指代放置该元素的准确的桶。

不要求此容器的迭代顺序稳定(故例如 std::equal 不能用于比较二个 std::unordered_multiset ),除了关键比较等价(以 key_eq() 为比较器比较相等)的每组元素组成迭代顺序中的相接子范围,它可用 equal_range() 访问。


容量

检查容器是否为空

std::unordered_multiset::empty

bool empty() const noexcept;

(C++11 起)
(C++20 前)

[[nodiscard]] bool empty() const noexcept;

(C++20 起)

 检查容器是否无元素,即是否 begin() == end() 。

参数

(无)

返回值

若容器为空则为 true ,否则为 false

复杂度

常数。

返回容纳的元素数

std::unordered_multiset::size

size_type size() const noexcept;

(C++11 起)

返回容器中的元素数,即 std::distance(begin(), end()) 。

参数

(无)

返回值

容器中的元素数量。

复杂度

常数。

返回可容纳的最大元素数

std::unordered_multiset::max_size

size_type max_size() const noexcept;

(C++11 起)

 返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end()) 。

参数

(无)

返回值

元素数量的最大值。

复杂度

常数。

注意

此值通常反映容器大小上的理论极限,至多为 std::numeric_limits::max() 。运行时,可用 RAM 总量可能会限制容器大小到小于 max_size() 的值。

调用示例

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include using namespace std;struct Cell
{int x;int y;Cell() = default;Cell(int a, int b): x(a), y(b) {}Cell &operator +=(const Cell &cell){x += cell.x;y += cell.y;return *this;}Cell &operator +(const Cell &cell){x += cell.x;y += cell.y;return *this;}Cell &operator *(const Cell &cell){x *= cell.x;y *= cell.y;return *this;}Cell &operator ++(){x += 1;y += 1;return *this;}bool operator <(const Cell &cell) const{if (x == cell.x){return y < cell.y;}else{return x < cell.x;}}bool operator >(const Cell &cell) const{if (x == cell.x){return y > cell.y;}else{return x > cell.x;}}bool operator ==(const Cell &cell) const{return x == cell.x && y == cell.y;}
};struct myCompare
{bool operator()(const int &a, const int &b){return a < b;}
};std::ostream &operator<<(std::ostream &os, const Cell &cell)
{os << "{" << cell.x << "," << cell.y << "}";return os;
}std::ostream &operator<<(std::ostream &os, const std::pair &pCell)
{os << pCell.first << "-" << pCell.second;return os;
}struct CHash
{size_t operator()(const Cell& cell) const{size_t thash = std::hash()(cell.x) | std::hash()(cell.y);
//        std::cout << "CHash: " << thash << std::endl;return thash;}
};struct CEqual
{bool operator()(const Cell &a, const Cell &b) const{return a.x == b.x && a.y == b.y;}
};int main()
{std::cout << std::boolalpha;std::mt19937 g{std::random_device{}()};srand((unsigned)time(NULL));auto generate = [](){int n = std::rand() % 10 + 110;Cell cell{n, n};return cell;};std::vector vector1(6);std::generate(vector1.begin(), vector1.end(), generate);std::cout << "vector1:          ";std::copy(vector1.begin(), vector1.end(), std::ostream_iterator(std::cout, " "));std::cout << std::endl;//检查容器是否无元素,即是否 begin() == end() 。std::unordered_multiset unordered_multiset1;std::cout << "unordered_multiset1 is empty " << unordered_multiset1.empty() << std::endl;unordered_multiset1 = {generate(), generate(), generate(), generate(), generate(), generate()};;std::cout << "unordered_multiset1:   ";std::copy(unordered_multiset1.begin(), unordered_multiset1.end(), std::ostream_iterator(std::cout, " "));std::cout << std::endl;std::cout << "unordered_multiset1 is empty " << unordered_multiset1.empty() << std::endl;std::cout << std::endl;std::unordered_multiset unordered_multiset2;for (size_t index = 0; index < 6; index++){unordered_multiset2.emplace(std::rand() % 10 + 100, std::rand() % 10 + 100);//返回容器中的元素数,即 std::distance(begin(), end()) 。std::cout << "unordered_multiset2 size:  " << unordered_multiset2.size() << std::endl;std::copy(unordered_multiset2.begin(), unordered_multiset2.end(), std::ostream_iterator(std::cout, " "));std::cout << std::endl;}std::cout << std::endl;//返回根据系统或库实现限制的容器可保有的元素最大数量,//即对于最大容器的 std::distance(begin(), end()) 。std::unordered_multiset unordered_multiset_c;std::cout << "unordered_multiset max_size:      " << unordered_multiset_c.max_size() << std::endl;std::unordered_multiset unordered_multiset_i;std::cout << "unordered_multiset max_size:       " << unordered_multiset_i.max_size() << std::endl;std::unordered_multiset unordered_multiset_ui8;std::cout << "unordered_multiset max_size:   " << unordered_multiset_ui8.max_size() << std::endl;std::unordered_multiset unordered_multiset_ui16;std::cout << "unordered_multiset max_size:  " << unordered_multiset_ui16.max_size() << std::endl;std::unordered_multiset unordered_multiset_ui32;std::cout << "unordered_multiset max_size:  " << unordered_multiset_ui32.max_size() << std::endl;std::unordered_multiset unordered_multiset_ui64;std::cout << "unordered_multiset max_size:  " << unordered_multiset_ui64.max_size() << std::endl;std::unordered_multiset unordered_multiset_s;std::cout << "unordered_multiset max_size:     " << unordered_multiset_s.max_size() << std::endl;std::unordered_multiset unordered_multiset_d;std::cout << "unordered_multiset max_size:    " << unordered_multiset_d.max_size() << std::endl;std::unordered_multiset unordered_multiset_f;std::cout << "unordered_multiset max_size:     " << unordered_multiset_f.max_size() << std::endl;std::unordered_multiset unordered_multiset_l;std::cout << "unordered_multiset max_size:      " << unordered_multiset_l.max_size() << std::endl;std::unordered_multiset unordered_multiset_ll;std::cout << "unordered_multiset max_size: " << unordered_multiset_ll.max_size() << std::endl;std::unordered_multiset unordered_multiset_str;std::cout << "unordered_multiset max_size:    " << unordered_multiset_str.max_size() << std::endl;std::unordered_multiset unordered_multiset_Cell;std::cout << "unordered_multiset max_size:      " << unordered_multiset_Cell.max_size() << std::endl;return 0;
}

输出

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...