c++修炼之路之STL_map,set

目录

一:序列式容器与键值对 

二:set与multiset 

三:map与multimap 

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

一:序列式容器与键值对 

1.在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list,deque,forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面
存储的是元素本身

2.关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的
键值对,在数据检索时比序列式容器效率更高

3.键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应该单词,在词典中就可以找到与其对应的中文含义。

4.STL中键值对的定义

template <class T1, class T2>
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair(): first(T1()), second(T2())
{}
pair(const T1& a, const T2& b): first(a), second(b)
{}
};

二:set与multiset 

1. set是按照一定次序存储元素的容器
2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。
set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行
排序。
4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对
子集进行直接迭代。
5. set在底层是用二叉搜索树(红黑树)实现的。

1.构造相关 

2.迭代器与容量

3.修改与其他操作

4.multiset与set的接口函数一样,但set不允许重复值插入,multiset允许插入,当find时返回第一个重复值的迭代器

5.相关使用

set<int> s1;
s1.insert(1);
s1.insert(6);
s1.insert(3);
s1.insert(19);
s1.insert(11);
set<int>::iterator it1 = s1.begin();
while (it1 != s1.end())
{cout << *it1 << " ";++it1;
}
cout << endl;for (const auto& e : s1)
{cout << e << " ";
}
cout << endl;s1.erase(11);
for (const auto& e : s1)
{cout << e << " ";
}
cout << endl;

三:map与multimap 

1. map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元
素。
2. 在map中,键值key通常用于排序和唯一地标识元素,而值value中存储与此键值key关联
的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类
型value_type绑定在一起,为其取别名称为pair:
typedef pair<const key, T> value_type;
3. 在内部,map中的元素总是按照键值key进行比较排序的。
4. map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序
对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
5. map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
6. map通常被实现为二叉搜索树(更准确的说:平衡二叉搜索树(红黑树))

1.构造与迭代器

2.修改与访问

 

 注:operator[]的解释

 3.使用

map<string, int> count;
//几种插入方式
count.insert(make_pair("apple",1));
count.insert(pair<string, int>("apple",1));
pair<string, int> p("apple",1);
count.insert(p);map<string, int>::iterator it1 = count.begin();
while (it1 != count.end())
{//cout << (*it1).first << ":" << (*it1).second << " ";cout << it1->first << ":" << it1->second << " ";++it1;
}
cout << endl;for (const auto& e : count)
{cout << e.first << ":" << e.second << " ";
}
cout << endl;

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

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

相关文章

【Linux】 Linux makefile 教程

什么是makefile&#xff1f;或许很多Winodws的程序员都不知道这个东西&#xff0c;因为那些Windows的IDE都为你做了这个工作&#xff0c;但我觉得要作一个好的和professional的程序员&#xff0c;makefile还是要懂。这就好像现在有这么多的HTML的编辑器&#xff0c;但如果你想成…

不同尺寸进行适配

1、适应不同分辨率 平板&#xff1a; 2176 * 1600 一体机&#xff1a;1920 * 1080 2、默认平板css 3、入口文件上面添加 4、XX.css 采用媒体文件 media only screen and (min-width:1920px) and (max-device-width: 1930px){ } 5、使用grid分布 6、使用bootstrap布局&#x…

Vue基础2

1.监视属性 先推荐大家安装第一个vscode常用插件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>天气案例_监视简写</title><!-- 引入Vue --><script type"text/javascript"…

Linux操作系统常用命令总结

1、网络配置查看 要想知道网络的配置状态&#xff0c;我们可以使用ifconfig 或者 ip命令来查看。 这两个命令功能都差不多&#xff0c;不过它们属于不同的软件包&#xff0c;ifconfig属于net-tools软件包&#xff0c;ip属于iproute2软件包&#xff0c;通过查资料&#xff0c;…

【全栈实战】大模型自学:从入门到实战打怪升级,20W字总结(二)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本栏讲解【全栈实战】大模型自学&#xff1a;从入门到实战打怪升级。 &#x1f514;专栏持续更新&#xff0c;适合人群&#xff1a;本科生、研究生、大模型爱好者&#xff0c;期…

Android笔试面试题AI答之Activity(5)

答案来自文心一言&#xff0c;仅供参考 文章目录 1.简述Activity&#xff0c;Intent&#xff0c;Service是什么关系 &#xff1f;一、定义与功能二、关系描述 2.简述Android中activity&#xff0c;context&#xff0c;application有什么不同&#xff1f;一、定义与功能二、不同…

【通俗理解】涌现现象与神经网络——从结构到智能的飞跃

【通俗理解】涌现现象与神经网络——从结构到智能的飞跃 涌现现象的类比 你可以把涌现现象比作一个“魔法锅”&#xff0c;锅里的各种原料&#xff08;内在结构和相互作用&#xff09;在特定的条件下相互作用&#xff0c;最终“熬制”出令人惊叹的“魔法汤”&#xff08;整体性…

vim进行行选择或列选择

Ctrlv&#xff1a;用于进入块选择模式&#xff08;Visual Block Mode&#xff09;&#xff0c;用于选择矩形块区域。你可以用这种模式来选择多个列或矩形区域的内容。 Shiftv&#xff1a;用于进入行选择模式&#xff08;Visual Line Mode&#xff09;&#xff0c;用于选择整行…

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

无线融合,智能协同:ECWAN打造物联网高效协同网络

关键词&#xff1a;资产管理、ECWAN、无线混合组网、用电监测、用电计量、广域基站、计量插座、边缘协同 在当今快速发展的物联网领域&#xff0c;每天都有数以亿计的设备互相通信&#xff0c;形成庞大而复杂的网络生态。在这样的背景下&#xff0c;ECWAN技术以其灵活、高效和智…

Biorhythms(牛客)

由题意可以知 CRT模板即可 #include<iostream> using namespace std; typedef long long ll; const int N19; ll a[N],b[N],m[N],invm[N]; ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x1,y0;return a;}ll dexgcd(b,a%b,y,x);y-a/b*x;return d; } void solve(){for…

C++笔记---类和对象

1. 类的定义 类是C中的一种自定义类型&#xff0c;是某个具体事物或概念的抽象化代码表示&#xff0c;通过类的成员&#xff08;变量函数/方法&#xff09;&#xff0c;可以表征出事物或概念的特征。 1.1 类定义的格式 class Stack { public:// 成员函数void Init(int n 4)…

C语言从头学39——结构体位字段、弹性数组成员

1、struct位字段 位字段是C语言 struct 的一种特殊数据结构&#xff0c;它的属性&#xff08;这里称为字段&#xff09;由二进制位组成&#xff0c;适合操作二进制数据。每个属性的取值只有整数且不会出现负值&#xff0c;故数据类型为 unsigned int。 位字段结构…

大数据采集汇聚系统研究

大数据采集汇集系统是一种能够广泛收集、处理和存储来自多种数据源的海量数据的系统。该系统在现代企业管理和决策中发挥着至关重要的作用&#xff0c;为企业提供了强大的数据支持和分析能力。以下是对大数据采集汇集系统的详细介绍&#xff1a; 一、系统概述 大数据采集汇集…

八股文”在实际工作中是助力、阻力还是空谈?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

Laravel序列化解码:深入Eloquent模型的序列化机制

Laravel序列化解码&#xff1a;深入Eloquent模型的序列化机制 引言 Laravel作为一门优雅的PHP Web开发框架&#xff0c;提供了许多便利的功能来简化开发过程。其中一个强大而易用的功能便是模型的序列化。序列化是将对象状态转换为可以存储或传输的格式的过程。在Laravel中&a…

DNS、网关、IP、DHCP

DNS、网关、IP、DHCP&#xff1a;深入剖析与理解 在计算机网络的世界中&#xff0c;DNS、网关、IP和DHCP是四个至关重要的概念&#xff0c;它们共同构建了互联网的基础架构&#xff0c;确保了数据的准确传输和设备的有效连接。本文将深入剖析这四个概念&#xff0c;帮助读者更…

《动手做科研 》| 03. 如何阅读人工智能研究论文

地址链接:《动手做科研》03. 如何阅读人工智能研究论文 导读: 在刚迈入科研时&#xff0c;人人都说读论文很重要&#xff0c;但是很少有人能完整地教你应该如何读论文。论文不仅揭示了行业的最新进展和趋势&#xff0c;而且为我们提供了改进技术和解决复杂问题的思路。然而&…

==和equals的区别以及为什么重写hashcode

对于基本数据类型是比较值&#xff0c;引用数据类型比较地址是否相等&#xff1b;equals一般是比较对象的地址&#xff0c;但是具体分析&#xff0c;如integer里面的equal&#xff0c;就是用里面的基本数据类型int的值取比较的。 integer缓存机制&#xff1a;用 a5,或者a Inte…

【JAVA】JAVA学习网站推荐

一、简介 为了让大家和自己不错过优质的JAVA学习网站&#xff0c;我会在不断的学习过程中补充完善此篇章&#xff1b; 二、推荐网站 1、大白菜导航 推荐理由&#xff1a;介绍java,又不止介绍java;智者见智吧&#xff1b; 后续更新中…