C++ 您所在的位置:网站首页 set与pair的区别 C++

C++

2024-06-29 19:00| 来源: 网络整理| 查看: 265

目录

前言

一、set的简介

二、set相关接口

1、构造相关接口

2、迭代器相关接口

3、容量相关接口

4、修改相关接口

5、其他相关操作 

三、set的应用场景

四、map简介 

五、map相关接口

1、构造函数相关接口

2、迭代器相关接口

3、容量与修改相关接口

4、方括号访问与其他函数

六、map的应用场景

前言

        前面我们学习了vector、list等容器,其实他们都属于序列式容器,因为其底层为线性结构;今天我们学习使用的set与map是属于关联式容器,关联式容器更注重于数据检索访问的效率;本文所有的资料均查阅于文档,以下为文档链接;可自行查看;

文档链接

一、set的简介

        在C++中,它是一种集合,是我们前面二叉搜索树的Key模型;其所在的头文件是set;其实这个头文件下,还有一个兄弟容器 ------- multiset,在介绍set是我也会介绍multiset,因为二者其实用法区别并不大,差异我会一 一介绍出来;

        关于multiset其实与set几乎差不多,唯一区别是,set会去重,而multiset不会;本文主要注重set的讲解,当然,你会使用set,multiset你也自然会使用了;

        set的类模板如上所示;我们说过它是我们前面学过二叉搜索树的Key模型;因此它的第一个模板参数就是我们的Key的类型;第二个模板参数是比较的方式,需要传入一个仿函数类;第三个参数为内存池相关对象;传默认即可;

        首先我们查看该类的类型重定义,我们发现该类有key_type与value_type都是第一个模板参数T类型;所以说set是Key模型;然后我们发现set的迭代器是双向迭代器;

二、set相关接口 1、构造相关接口

        这部分我们主要看其构造函数与赋值重载的接口;构造函数接口如下;我们发现有三种不同的构造方式,第一种是无参的默认构造;第二种是迭代器区间构造;第三种是拷贝构造;有了前面的基础,这里的接口几乎看一眼都会使用了; 

void test_set3() { // 无参构造 set s1; // 迭代器区间构造 vector v{ 1,2,3,4,5,6 }; // C++11初始化语法 set s2(v.begin(), v.end()); // 拷贝构造 set s3(s2); }

        赋值重载接口如下;赋值重载对于已存在的对象进行赋值;使用难度几乎没有;

2、迭代器相关接口

        迭代器真的不愧是STL中六大组件之一,无论是线性结构还是set与map中的树形结构,我们都可以通过迭代器接口来进行访问;使用起来几乎没有区别;这里迭代器为双向迭代器,因此不支持方括号的方式访问,但支持++与--;使用如下;

void test_set4() { set s1; // 这里为了展示迭代器先使用插入接口了 s1.insert(2); s1.insert(3); s1.insert(1); s1.insert(5); s1.insert(2); s1.insert(1); s1.insert(4); set::iterator it = s1.begin(); while (it != s1.end()) { cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有