C++进阶 —— map

news2024/11/24 9:36:08

目录

一,map介绍

类pair

函数模板make_pair

二,map使用


一,map介绍

  • map是关联容器,按照特定的次序存储元素(由键key和值value组合而成的);
  • 键key通常用于排序及唯一标识元素,而值value则存储与键key关联的内容;
  • 键key和值value的类型可能不同,且在map的内部,key与value通过成员类型value_type绑定在一起;
typedef pair<const Key, T> value_type;
  • map中的元素总是按照其内部比较对象(compare)所指示的特定严格弱排序准则进行排序;
  • map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代;
  • map支持下标访问符,即在[ ]中放key,即可找到与key对应的value;
  • map通常被实现为二叉搜索树(更准确的说,平衡二叉搜索树(红黑树));

注:

  • map中的元素是键值对;
  • map中的key是唯一的,并且不能修改;
  • 默认按照小于的方式对key进行比较;
  • map中的元素如用迭代器去遍历,可以得到一个有序序列;
  • map底层为平衡搜索树(红黑树),查找效率比较高O(logN);

类pair

  • 此类将一对值组合在一起,值类型可以不同;
  • pair是tuple的特殊形式;
  • 可直接访问其公共成员变量firstsecond
template <class T1, class T2> struct pair;

函数模板make_pair

  • 用传递的元素,构建一个pair对象;
template <class T1, class T2>
  pair<V1,V2> make_pair (T1&& x, T2&& y);

二,map使用

  • Key,键值对中key的类型;
  • T,键值对中value的类型;
  • Compare,比较器类型,map中的元素是按照key来比较的,默认按照小于来比较,一般情况下(内置类型)该参数不需传递,如无法比较(自定义类型),需要用户自己显示传递比较规则(一般情况下按照函数指针或仿函数来传递);
  • Alloc,通过空间配置器来申请底层空间,不需要用户传递,除非用户不想使用标准库提供的空间适配器;

构造函数

操作函数

//迭代器
      iterator begin() noexcept;
const_iterator begin() const noexcept;
      iterator end() noexcept;
const_iterator end() const noexcept;
      reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
      reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;

//插入
single element (1)	
    pair<iterator,bool> insert (const value_type& val);
    template <class P> pair<iterator,bool> insert (P&& val);
with hint (2)	
    iterator insert (const_iterator position, const value_type& val);
    template <class P> iterator insert (const_iterator position, P&& val);
range (3)	
    template <class InputIterator>
    void insert (InputIterator first, InputIterator last);
initializer list (4)	
    void insert (initializer_list<value_type> il);

//删除
iterator  erase (const_iterator position);
size_type erase (const key_type& k);
iterator  erase (const_iterator first, const_iterator last);

//查找
      iterator find (const key_type& k);
const_iterator find (const key_type& k) const;

//访问
mapped_type& operator[] (const key_type& k);
mapped_type& operator[] (key_type&& k);

bool empty() const noexcept;
size_type size() const noexcept;
size_type count (const key_type& k) const;
void swap (map& x);
void clear() noexcept;
key_compare key_comp() const;
value_compare value_comp() const;

      iterator lower_bound (const key_type& k);
const_iterator lower_bound (const key_type& k) const;
      iterator upper_bound (const key_type& k);
const_iterator upper_bound (const key_type& k) const;

pair<const_iterator,const_iterator> equal_range (const key_type& k) const;
            pair<iterator,iterator> equal_range (const key_type& k);
int main()
{
	map<string, string> m;
	
	m.insert(pair<string, string>("peach", "桃子")); //pair<string, string> p("peach", "桃子");
	m.insert(make_pair("banan", "香蕉"));
	m["apple"] = "苹果";
	//m.at("waterme"); //不存在抛异常
	cout << m.size() << endl;
	cout << m.count("waterme") << endl;

	pair<map<string, string>::iterator, bool> ret = m.insert(make_pair("banan", "香蕉"));
	if (ret.second)
		cout << "insert successful" << endl;
	else
		cout << "insert failed" << endl;

	for (auto& e : m)
	{
		cout << e.first << "-->" << e.second << endl;
	}

	m.erase("apple");

	map<string, string>::iterator it = m.begin();
	while (it != m.end())
	{
		cout << (*it).first << "-->" << (*it).second << endl;
		++it;
	}

	it = m.find("banan");
	cout << (*it).first << "-->" << (*it).second << endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/589207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不愧是华为出来的大佬,实在是太强了.....

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c;当然也没指望能来大牛&#xff0c;提供的薪资在15-20k这个范围&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

Pillow(PIL)入门教程(非常详细)以及python实现jpg,png、ico、bmp格式互转大全

概述 Pillow库的特点&#xff1a; python3安装pillow&#xff1a; ​Pillow是什么 Pillow创建Image对象&#xff1a; jpg,png&#xff1a; jpg与png格式互转代码&#xff1a; 概述 Pillow 库&#xff08;有时也称 PIL 库&#xff09; 是 Python 图像处理的基础库&#xf…

计划学习网络安全,需要学习哪些知识,应该怎么学习?

虽然现在的网络安全大都是指渗透测试&#xff0c;但是并不代表只有渗透测试这一个方向&#xff0c;除此之外还有二进制逆向这个方向。以下会对这两个方向分别对您进行详解。 渗透测试方向 1、学习编程语言 &#xff08;1&#xff09;网站如何搭建的&#xff1f;HTML、CSS、J…

SpingBoot+LayUI 实现酒店管理系统编写

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

晚上12点接到面试邀约电话,待业一个月的我却拒绝了....

前言 一位测试朋友最近一直在找工作&#xff0c;前两天刚拒绝了一个面试。那天晚上12点多&#xff0c;他接到一个HR的面试电话&#xff0c;让他第二天早上10点去公司面试。朋友和HR聊了两句&#xff0c;了解到这位HR经常加班&#xff0c;于是果断拒绝了这个面试。 我还为他可惜…

AHB-to-APB Bridge——06testbench、env、base_test、scb

框架&#xff1a; testbench&#xff1a; HCLK_PCLK_RATIO&#xff1a;随机定义hclk pclk比率&#xff1b;各个接口clk、rst连接&#xff1b;生成满足相应比率的pclk&#xff1b;与DUT的连接&#xff1b;将vif set到agt中去&#xff1b;agt在set到底层 关于rest_if&#xff…

如何保证三个线程按顺序执行?不会我教你

&#x1f468;‍&#x1f393;作者&#xff1a;bug菌 ✏️博客&#xff1a;CSDN、掘金、infoQ、51CTO等 &#x1f389;简介&#xff1a;CSDN|阿里云|华为云|51CTO等社区博客专家&#xff0c;历届博客之星Top30&#xff0c;掘金年度人气作者Top40&#xff0c;51CTO年度博主Top12…

仪表板展示 | DataEase看世界:数据呈现世界油价变化

背景介绍 最近几个月&#xff0c;全球能源市场一直处于动荡不安的状态&#xff0c;与石油相关的新闻也非常频繁。2023年2月10日&#xff0c;面对西方多轮限价举措&#xff0c;俄罗斯副总理亚历山大诺瓦克宣布&#xff0c;俄罗斯将在3月把每日原油产量下调50万桶。目前&#xf…

FOFA-攻防挑战

记录一下中途短暂的辉煌时刻 辉煌一刻谁都有,别拿一刻当永久 在昨天初尝战果之后&#xff0c;今天又习惯性的打开 https://vulfocus.cn/ 发现今天还有挑战赛&#xff0c;按捺不住躁动的心&#xff0c;又开始了学习。今天主要拿下的是这四个镜像&#xff0c;同时我也会对我了解…

前端SKU一站式解决方案 - Geek-SKU

因为业务需要且市场上的UI框架与插件市场内没有简易的用法并且不够全面萌生便了自己写一个SKU组件的想法&#xff0c;于是Geek-SKU便应运而生。 现在的SKU组件已支持vue、uniapp&#xff0c;支持带图SKU、主题色设置、自动选择低价SKU、自动展示价格区间等&#xff0c;让您更便…

浏览器自动填充但是数据为空的问题

问题背景 公司项目中登录页为了方便&#xff0c;需要允许浏览器自动填充账号密码。这个在很多项目都很常见&#xff0c;但是测试中出现了这样一个问题&#xff1a;视觉上已经自动填充账号密码&#xff0c; 但是当点击密码的小眼睛或者点击登录时&#xff0c;会清空掉填充的数据…

火爆全网,性能测试-全链路压测实战总结,从需求到实战...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 流程导图 梳理阶段…

SpringBoot+Vue 的家政服务管理平台+数据库(附源码)

文章目录 1. 背景2.主要技术3. 可行性分析4.系统设计5系统的详细设计与实现5.1前台模块设计5.2后台功能模块 源码下载地址 1. 背景 本系统主要是设计出家政服务管理平台&#xff0c;基于B/S构架&#xff0c;后台数据库采用了Mysql&#xff0c;可以使数据的查询和存储变得更加有…

Linux函数库管理

文章目录 Linux函数库管理动态与静态函数库静态函数库动态函数库 ldconfig与 /etc/ld.so.confldconfig使用案例 程序的动态函数库解析&#xff1a;lddldd使用案例 校验软件的正确性常见的校验软件有哪些&#xff1f;使用案例 Linux函数库管理 在 Linux 操作系统中&#xff0c;…

【算法竞赛进阶指南】141.周期 题解 KMP 最小循环节

题目描述 一个字符串的前缀是从第一个字符开始的连续若干个字符&#xff0c;例如 abaab 共有 5 5 5 个前缀&#xff0c;分别是 a&#xff0c;ab&#xff0c;aba&#xff0c;abaa&#xff0c;abaab。 我们希望知道一个 N N N 位字符串 S S S 的前缀是否具有循环节。 换言之…

7.Ansible Modules介绍

什么是Ansible Modules? Ansible模块根据其功能分为不同的组&#xff0c;每个模块提供了一些功能&#xff0c;可以直接使用。 模块官方文档: https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html 系统模块是要在系统级别执行的操作,例如修改系统上的用户…

Springboot +spring security,认证方式---Form表单认证的实现(三)

一.简介 这篇文章来学习下security的认证方式其中的Form表单认证 二.Spring Security的认证方式 2.1什么是认证 认证: 就是用来判断系统中是否存在某用户&#xff0c;并判断该用户的身份是否合法的过程&#xff0c;解决的其实是用户登录的问题。认证的存在&#xff0c;是为…

Spring Boot 如何实现异步消息处理

Spring Boot异步消息处理 在现代应用程序中&#xff0c;异步消息处理是一项至关重要的任务。它可以提高应用程序的性能、可伸缩性和可靠性&#xff0c;同时也可以提供更好的用户体验。Spring Boot提供了多种方式来实现异步消息处理&#xff0c;包括使用Spring AMQP、Spring Ka…

【斯歌X捷普】优秀体验官活动:全民开发的样板企业是这样炼成的

3月22日&#xff0c;上海斯歌与捷普共同举办了一场别出心裁的活动——“产品优秀体验官”颁奖典礼&#xff0c;以表彰对业务流程开发做出突出贡献的捷普员工。值得注意的是&#xff0c;获奖的14名流程开发人员中&#xff0c;有7人并非是专业的IT人员&#xff0c;而是来自业务岗…

搜索引擎变天了!谷歌宣布开放「生成式搜索平台」!AI 大模型颠覆搜索体验

作者 | 小戏、兔子酱 搜索引擎&#xff0c;可能真的要变天了&#xff01; Google 终于要迎来它 25 年来最大的改变&#xff0c;谷歌宣布了开始内测开放【生成式搜索平台&#xff08;Search Generative Experience&#xff0c;SGE&#xff09;】&#xff0c;并逐步舍弃那些甚至是…