set 类 和 map 类

1. 关联式容器

关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的

键值对,在数据检索时比序列式容器效率更高

2. 键值对

用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量keyvaluekey

表键值,value表示与key对应的信息

代码

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)
{}
};

3. 树形结构的关联式容器

根据应用场景的不桶,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构

树型结构的关联式容器主要有四种:map、set、multimap、multiset

这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列

4. 标准库里面的 set类 和 map类

set 类的介绍:

  1. set 类的实现底层就是红黑树,该容器可以进行双向迭代,且它是有序的
  2. 与哈希不同,它 和 map 都是树形结构

a. set 类的使用

  1. set 类的模板参数

    2. set 类的构造

     3.  set 类的修改

函数声明

pair<iterator,bool> insert

( const value_type& x )

功能介绍

set中插入元素x,实际插入的是<x, x>构成的

键值对,如果插入成功,返回<该元素在set中的

位置,true>,如果插入失败,说明xset中已经

存在,返回<x在set中的位置,false>

注意:

返回类型

是一个键值对

iterator代表新插入元素的位置,bool代表释放插入成功

函数声明

void erase ( iterator position )

void erase ( const value_type& x )

功能介绍

删除set中position位置上的元素

删除set中元素 x

函数声明                                                                                   

iterator find                                                                   

( const key_type& x ) const

功能介绍

返回set中值为x的元素的位置

函数声明

void erase

( iterator first, iterator last )

功能介绍

删除set中[ first, last ) 位置上的元素

  1. set 类的容量

函数声明

bool empty ( ) const

功能介绍

检查 set 是否为空

函数声明

size_type size() const

功能介绍

返回set中有效元素的个数

b. map 类的使用

  1. map 的构造
  • map()
  • map(InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator())

  1. map 的修改

函数声明

pair<iterator,bool> insert

( const value_type& x )

功能介绍

在map中插入键值对x,注意x是一个键值

,返回值也是键值对:iterator代表新插入

元素的位置,bool代表释放插入成功

代码举例

#include<iostream>
using namespace std;
#include<map>
int main()
{map<int, int> s;s.insert(make_pair(10, 2)); //make_pair 是模板函数// s.insert(pair<int,int>(10,2))  也是对的auto it = s.begin(); //it 是迭代器while (it != s.end()){cout << it->first << ":" << (*it).second << endl; //*it 是键值对 ++it;}
}

真正写法是 it->->first (省略了一个->,这里用法提过一次,具体看底层实现)

函数声明

size_type erase ( const key_type& x )

void erase ( iterator position )

void erase ( iterator first, iterator last )

功能介绍

删除键值为x的元素

删除position位置上的元素

删除[first, last)区间中的元素

  1. map 的容量和访问

这里明显用了运算符重载了[] , 传的参数是key_vaule 模型里面的 key ,返回得到的是 vaule 本身(既可被访问也可被修改)

代码举例

#include<iostream>
using namespace std;
#include<map>
int main()
{string arr[] = { "苹果", "香蕉" ,"苹果" ,"梨" ,"葡萄" };map<string, int> s;for (auto i : arr){s[i]++;}auto it = s.begin();while (it != s.end()){cout << it->first << ":" << it->second << endl;++it;}
}

运行结果:

实现原理

不看后置++,单看[] , 实际上里层是调用了 insert 函数 , 返回

这个类型的,再用 .first(iterator 类型) ,返回 它的 ->second (就是 value 了)

c. multiset类 的使用

与 set 类的不同的是:multiset 类 不会去重

d. multimap类 的使用

与 map 类的不同的是:multimap类 不会去重

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

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

相关文章

LibRadtran使用教程

LibRadtran使用教程 1.简介2.基本语法规则3.例子3.1 例子13.2 例子2 1.简介 关于LibRadtran的介绍以及安装可以参考另一篇博文&#xff1a;Windows系统LibRadtran安装。这里将针对LibRadtran的基础使用&#xff0c;以及基本语法进行介绍。 2.基本语法规则 uvspec < input…

C++_ 头指针在链表的操作中用来标识链表的起始位置

链表&#xff08;linked list&#xff09;是一种常见的数据结构&#xff0c;用于存储一系列元素。它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。 在 C 中&#xff0c;可以使用结构体来表示链表节点&#xff0c;然后使用指针将这些节点连接起来。 -…

【Tars-go】腾讯微服务框架学习使用03-- TarsUp协议

3 TarsUP协议 统一通信协议 TarsTup | TarsDocs (tarscloud.github.io) TarsDocs/base at master TarsCloud/TarsDocs (github.com) &#xff1a; 有关于tars的所有介绍 每一个rpc调用双方都约定一套数据序列化协议&#xff0c;gprc用的是protobuff&#xff0c;tarsgo是统一…

嵌入式面试的中的一些潜规则

潜规则1:面试的本质不是考试,而是告诉面试官你会做什么 经验不够的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难倒你的意思,只是想通过提问的方式来知道你会什么。 比如stm32单片机的启动过程是怎样的? 没入门的说从main函数…

C++类和对象(四)——类的实现、const、explicit、static

1. 日期类的实现&#xff08;包括前置和后置&#xff09; Date.h #pragma once #include<iostream> #include<assert.h> using namespace std;class Date { public:bool CheckInvalid() const;Date(int year 1, int month 1, int day 1);bool operator<(co…

Docker+Uwsgi+Nginx部署Django项目保姆式教程

之前&#xff0c;我和大家分享了在docker中使用uwsgi部署django项目的教程。这次&#xff0c;为大家带来的是使用DockerUwsgiNginx部署Django项目。废话不多说&#xff0c;我们开干。 步骤1&#xff1a;使用命令创建一个django项目 我这里python版本使用的是3.9.x 首先&#…

C++:类与对象(二)

类的6个默认成员函数 目录 类的6个默认成员函数 构造函数 析构函数 拷贝构造 赋值运算符重载 运算符重载 赋值运算符重载 const成员 取地址及const取地址操作符重载 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中什么都没有吗&#xff1f;并不是的&…

Java---搭建junit4.x单元测试环境,并进行测试

搭建junit4.x单元测试环境 1.选择Project Structure 2.选择Modules&#xff0c;选择要加入测试环境的模块&#xff0c;选择Dependencies,可以看到当前模块都有哪些依赖。 3.点击 后选择第一个 4.找到你安装IDEA的文件夹&#xff0c;进入到IntelliJ IDEA 2018.3.4\lib目录下…

2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现&#xff1a; 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖小区编号进行合理配置&#xff0c;以避免 PCI 冲突、PCI 混淆以及 PCI 模3 千扰等现象。PCI 规划…

基于ssm的大学生租房平台的设计与实现(java源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的大学生租房平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 大学生租房平台的设计与实现的主…

基于SpringBoot+Vue的毕业设计管理系统(源码+文档+部署+讲解)

一.系统概述 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针…

轮腿机器人-五连杆正运动学解算

轮腿机器人-五连杆与VMC 1.五连杆正运动学分析2.参考文献 1.五连杆正运动学分析 如图所示为五连杆结构图&#xff0c;其中A&#xff0c;E为机器人腿部控制的两个电机&#xff0c;θ1,θ4可以通过电机的编码器测得。五连杆控制任务主要关注机构末端C点位置&#xff0c;其位置用直…