c++11 标准模板(STL)(std::multimap)(四)
定义于头文件 <map>
| template< class Key, | (1) | |
| namespace pmr { template <class Key, class T, class Compare = std::less<Key>> | (2) | (C++17 起) |
multimap 是关联容器,含有关键-值 pair 的已排序列表,同时容许多个入口拥有同一关键。按照应用到关键的比较函数 Compare 排序。搜索、插入和移除操作拥有对数复杂度。
拥有等价关键的关键-值 pair 的顺序就是插入顺序,且不会更改。(C++11 起)
凡在标准库使用比较 (Compare) 概念出,都用描述于比较 (Compare) 上的等价关系确定等价性。不精确地说,若二个对象 a 和 b 互不小于对方: !comp(a, b) && !comp(b, a) ,则认为它们等价。
迭代器
返回指向容器第一个元素的迭代器
std::multimap<Key,T,Compare,Allocator>::begin,
std::multimap<Key,T,Compare,Allocator>::cbegin
| iterator begin(); | (C++11 前) | |
| iterator begin() noexcept; | (C++11 起) | |
| const_iterator begin() const; | (C++11 前) | |
| const_iterator begin() const noexcept; | (C++11 起) | |
| const_iterator cbegin() const noexcept; | (C++11 起) |
返回指向容器首元素的迭代器。
若容器为空,则返回的迭代器将等于 end() 。
参数
(无)
返回值
指向首元素的迭代器。
复杂度
常数。
返回指向容器尾端的迭代器
std::multimap<Key,T,Compare,Allocator>::end,
std::multimap<Key,T,Compare,Allocator>::cend
| iterator end(); | (C++11 前) | |
| iterator end() noexcept; | (C++11 起) | |
| const_iterator end() const; | (C++11 前) | |
| const_iterator end() const noexcept; | (C++11 起) | |
| const_iterator cend() const noexcept; | (C++11 起) |
返回指向容器末元素后一元素的迭代器。
此元素表现为占位符;试图访问它导致未定义行为。
参数
(无)
返回值
指向后随最后元素的迭代器。
复杂度
常数。
返回指向容器最后元素的逆向迭代器
std::multimap<Key,T,Compare,Allocator>::rbegin,
std::multimap<Key,T,Compare,Allocator>::crbegin
| reverse_iterator rbegin(); | (C++11 前) | |
| reverse_iterator rbegin() noexcept; | (C++11 起) | |
| const_reverse_iterator rbegin() const; | (C++11 前) | |
| const_reverse_iterator rbegin() const noexcept; | (C++11 起) | |
| const_reverse_iterator crbegin() const noexcept; | (C++11 起) |
返回指向逆向容器首元素的逆向迭代器。它对应非逆向容器的末元素。
参数
(无)
返回值
指向首元素的逆向迭代器。
复杂度
常数。
返回指向前端的逆向迭代器
std::multimap<Key,T,Compare,Allocator>::rend,
std::multimap<Key,T,Compare,Allocator>::crend
| reverse_iterator rend(); | (C++11 前) | |
| reverse_iterator rend() noexcept; | (C++11 起) | |
| const_reverse_iterator rend() const; | (C++11 前) | |
| const_reverse_iterator rend() const noexcept; | (C++11 起) | |
| const_reverse_iterator crend() const noexcept; | (C++11 起) |
返回指向逆向容器末元素后一元素的逆向迭代器。它对应非逆向容器首元素的前一元素。此元素表现为占位符,试图访问它导致未定义行为。
参数
(无)
返回值
指向末元素后一元素的逆向迭代器。
复杂度
常数。
调用示例
#include <iostream>
#include <forward_list>
#include <string>
#include <iterator>
#include <algorithm>
#include <functional>
#include <map>
#include <time.h>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<const int, Cell> &pCell)
{os << pCell.first << "-" << pCell.second;return os;
}int main()
{std::cout << std::boolalpha;std::mt19937 g{std::random_device{}()};srand((unsigned)time(NULL));auto genKey = [](){return std::rand() % 10 + 100;};auto generate = [](){int n = std::rand() % 10 + 100;Cell cell{n, n};return cell;};std::multimap<int, Cell> multimap1;for (size_t index = 0; index < 5; index++){multimap1.insert({genKey(), generate()});}std::cout << "multimap1: ";std::copy(multimap1.begin(), multimap1.end(), std::ostream_iterator<std::pair<const int, Cell>>(std::cout, " "));std::cout << std::endl;std::cout << "const_iterator: ";for (std::multimap<int, Cell>::const_iterator cit = multimap1.cbegin(); cit != multimap1.cend(); cit++){std::cout << cit->first << "-" << cit->second << " ";}std::cout << std::endl;std::cout << "const_reverse_iterator: ";for (std::multimap<int, Cell>::const_reverse_iterator crit = multimap1.crbegin(); crit != multimap1.crend(); crit++){std::cout << crit->first << "-" << crit->second << " ";}std::cout << std::endl;std::cout << "iterator: ";for (std::multimap<int, Cell>::iterator it = multimap1.begin(); it != multimap1.end(); it++){it->second = generate();std::cout << it->first << "-" << it->second << " ";}std::cout << std::endl;std::cout << "reverse_iterator: ";for (std::multimap<int, Cell>::reverse_iterator it = multimap1.rbegin(); it != multimap1.rend(); it++){it->second = generate();std::cout << it->first << "-" << it->second << " ";}std::cout << std::endl;return 0;
}
输出

相关文章:
c++11 标准模板(STL)(std::multimap)(四)
定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…...
乐观锁及悲观锁
目录 1.乐观锁 (1).定义 (2).大体流程 (3).实现 (4).总结 2.悲观锁 (1).定义 (2).大体流程 (3).实现 (4).缺点 (5).总结 1.乐观锁 (1).定义 乐观锁在操作数据时非常乐观,认为别的线程不会同时修改数据所以不会上锁,但是在更新的时候会判断一…...
常见的锁策略
注意: 接下来讲解的锁策略不仅仅是局限于 Java . 任何和 "锁" 相关的话题, 都可能会涉及到以下内容. 这些特性主要是给锁的实现者来参考的.普通的程序猿也需要了解一些, 对于合理的使用锁也是有很大帮助的. 1.乐观锁 vs 悲观锁 悲观锁: (认为出现锁冲…...
springboot学习(八十) springboot中使用Log4j2记录分布式链路日志
在分布式环境中一般统一收集日志,但是在并发大时不好定位问题,大量的日志导致无法找出日志的链路关系。 可以为每一个请求分配一个traceId,记录日志时,记录此traceId,从网关开始,依次将traceId记录到请求头…...
10种ADC软件滤波方法及程序
10种ADC软件滤波方法及程序一、10种ADC软件滤波方法1、限幅滤波法(又称程序判断滤波法)2、中位值滤波法3、算术平均滤波法4、递推平均滤波法(又称滑动平均滤波法)5、中位值平均滤波法(又称防脉冲干扰平均滤波法&#x…...
第五章:Windows server加域
加入AD域:教学视频:https://www.bilibili.com/video/BV1xM4y1D7oL/?spm_id_from333.999.0.0首先我们选择一个干净的,也就是新建的没动过的Windows server虚拟机。我们将DNS改成域的ip地址,还要保证它们之间能ping的通,…...
Elasticsearch:获取 nested 类型数组中的所有元素
在我之前的文章 “Elasticsearch: object 及 nested 数据类型” 对 nested 数据类型做了一个比较详细的介绍。在实际使用中,你在构建查询时肯定会遇到一些问题。根据官方文档介绍,nested 类型字段在隐藏数组中索引其每个项目,这允许独立于索引…...
English Learning - Day53 作业打卡 2023.2.7 周二
English Learning - Day53 作业打卡 2023.2.7 周二引言1. 我必须承认,我之前学习没你用功。have to VS must2. 这跟我想得一样简单。3. 生活并不像它看上去那么顺风顺水,但也不会像我们想象得那么难。Look VS seem4. 你比去年高多了。5. 你关心你的工作胜…...
SpringMVC--注解配置SpringMVC、SpringMVC执行流程
注解配置SpringMVC 使用配置类和注解代替web.xml和SpringMVC配置文件的功能 创建初始化类,代替web.xml 在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类, 如果找到的话就用它来配置Servle…...
JavaScript中数组常用的方法
文章目录前言常用数组方法1、 join( )2、push()与 pop()3、shift()与 unshift()4、sort()5、reverse()6、slice(ÿ…...
ModuleNotFoundError: No module named ‘pip‘
项目场景:pip 错误 Traceback (most recent call last): File "E:\KaiFa\Python\Python38\lib\runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "E:\KaiFa\Python\Python38\lib\runpy.py&qu…...
ROS2 入门应用 发布和订阅(C++)
ROS2 入门应用 发布和订阅(C)1. 创建功能包2. 创建源文件2.1. 话题发布2.2. 话题订阅3. 添加依赖关系4. 添加编译信息4.1. 添加搜索库4.2. 增加可执行文件4.3. 增加可执行文件位置5. 编译和运行1. 创建功能包 在《ROS2 入门应用 工作空间》中已创建和加…...
XSS漏洞,通过XSS实现网页挂马
**今天讲下通过XSS实现网页挂马~*,目的是了解安全方面知识,提升生活网络中辨别度 原理: 实验分为两部分: 1、通过Kali linux,利用MS14_064漏洞,制作一个木马服务器。存在该漏洞的用户一旦通过浏览器访问木…...
家政服务小程序实战教程09-图文卡片
小程序还有一类需求就是展示服务的列表,我们这里用图文卡片组件来实现,我们先要添加一个标题,使用网格布局来实现 第一列添加一个文本组件,第二列添加一个图标组件 修改文本组件的文本内容,设置外边距 设置第二列的样式…...
国内唯一一部在CentOS下正确编译安装和使用RediSearch的教程
开篇 Redis6开始增加了诸多激动人心的模块,特别是:RedisJSON和RediSearch。这两个模块已经完全成熟了。它们可以直接使用我们的生产上的Redis服务器来做全文搜索(二级搜索)以取得更廉价的硬件成本、同时在效率上竟然超过了Elastic…...
前端对于深拷贝和浅拷贝的应用和思考
浅拷贝 浅拷贝 : 浅拷贝是指对基本类型的值拷贝,以及对对象类型的地址拷贝。它是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据。最简单直接的浅拷贝就…...
Java基础常见面试题(三)
String 字符型常量和字符串常量的区别? 形式上: 字符常量是单引号引起的一个字符,字符串常量是双引号引起的若干个字符; 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算;字符串常量代表一个地址值…...
C++设计模式(13)——装饰模式
亦称: 装饰者模式、装饰器模式、Wrapper、Decorator 意图 装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 问题 假设你正在开发一个提供通知功能的库, 其他程序可使用它向用户发…...
ESP-01S通过AT指令上报数据到阿里云物模型
ESP-01S使用AT指令上报数据到阿里云物模型 上篇文章介绍了如何用AT指令连接阿里云并进行通信:https://blog.csdn.net/weixin_46251230/article/details/128995530 但最终需要将传感器数据上报到云平台显示,所以需要建立阿里云物模型 阿里云平台建立物…...
【强化学习】马尔可夫决策过程MDP
1.马尔可夫决策过程MDP 1.1 MDP五元组 MDP<S,A,P,R,γ>MDP<\mathcal{S},\mathcal{A},\mathcal{P},\mathcal{R},\mathcal{\gamma}>MDP<S,A,P,R,γ>,其中: S\mathcal{S}S:状态空间A\mathcal{A}A:动作空间P\mathc…...
Qwen3-ASR-0.6B惊艳效果:藏语、维吾尔语等少数民族语言识别案例
Qwen3-ASR-0.6B惊艳效果:藏语、维吾尔语等少数民族语言识别案例 1. 引言:多语言语音识别的突破 语音识别技术正在改变我们与设备交互的方式,但有一个领域一直存在巨大挑战——少数民族语言的识别。传统的语音识别模型往往只支持主流语言&am…...
SEO_2024年最新SEO策略与趋势深度解析(352 )
<h2>2024年最新SEO策略与趋势深度解析</h2> <p>在数字化时代,搜索引擎优化(SEO)依然是网站流量和品牌影响力的核心驱动力。2024年,随着互联网技术的不断进步,SEO策略和趋势也在不断演变。本文将详细…...
iMeta入选新锐期刊分区表生物学1区Top
2026年3月24日,2026年新锐期刊分区表正式发布。iMeta被评选为生物学1区Top期刊,标志着iMeta期刊学术声誉与影响力持续提升。自创刊以来,iMeta的每一步成长都离不开期刊编委、审稿专家及广大同行的鼎力支持。未来,iMeta将再接再厉&…...
黑丝空姐-造相Z-Turbo实战项目:数据库课程设计之AI图库管理系统
黑丝空姐-造相Z-Turbo实战项目:数据库课程设计之AI图库管理系统 最近在带学生做数据库课程设计,发现一个挺有意思的现象:很多同学觉得数据库设计就是建几张表,写几个查询,做完就完了,跟实际应用脱节挺大的…...
2026论文降重神器盘点!毕业论文“AIGC痕迹”怎么破?
【CSDN技术引言:拒绝“开源背调”式的学术翻车】 哈喽各位同行和科研圈的战友们。最近后台私信快炸了,今年这届硕博生仿佛遭遇了“灭顶之灾”。某985高校前天出炉的抽检结果直接把大家看傻了:明明自己逐字逐句手敲的论文,知网查重…...
告别重复劳动:用快马生成自动化脚本,实现dify多环境一键部署与高效管理
在团队协作中,dify的部署工作常常成为效率瓶颈。每次新版本发布或环境迁移时,手动配置docker-compose文件、处理版本差异、备份数据等重复操作不仅耗时,还容易出错。最近尝试用InsCode(快马)平台生成自动化脚本集,意外发现部署效率…...
MoveBase导航实战:Livox MID360与FAST-LIO+AMCL混合定位的调优与避障策略
1. Livox MID360雷达与FAST-LIO的实战配置 第一次用Livox MID360雷达时,我被它的非重复扫描模式惊艳到了——这种固态激光雷达能实现360无死角覆盖,特别适合狭小空间导航。但要让它在MoveBase系统中稳定工作,需要先解决几个关键配置问题。 雷…...
Vue/React项目实战:集成docx-preview实现动态报表预览与下载功能
Vue/React项目实战:动态报表预览与下载的工程化实现 在数据驱动的企业应用中,动态生成和预览业务报表是刚需功能。想象这样一个场景:销售团队在CRM系统中筛选季度数据后,需要立即查看格式规范的业绩分析报告,并能一键…...
某民办高校关键人才梯队建设项目成功案例纪实
——破解“断层”隐忧,构建人才梯队蓄水池【客户行业】学校、民办学校、民办高等教育【问题类型】人才梯队建设;人才培养体系;激励体系;核心人才保留【客户背景】长三角地区一所知名的民办应用型本科院校,建校25年&…...
Midjourney 图像到图像转换:真实人物与动漫的一致性与多样场景选择
Midjourney 拥有强大的图像到图像转换能力。本文将手把手教你如何在我们的 AceDataCloud 网站 上将照片切换到任何动漫场景,同时保持角色的一致性。 通过以下步骤,我们可以轻松实现角色一致性。 接下来,我们看一下效果,原始图像如…...
