C++ 头文件系列(set)详解

 更新时间:2017年02月02日 16:47:16   投稿:hebedich  
一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现 。

简介

头文件包含 set 、 multiset 两个类模版,这里要描述的概念与map非常相似,甚至连成员函数都几乎一样,所以这篇随笔会很短。

set

set如果翻译成中文应该是集合的意思,这里更确切的说是 唯一有序集合 ,性质与map类似:

  1. 关联性
  2. 元素唯一性
  3. 动态增长
  4. 有序性

此外的一个重要特点是:

Key与Value是同一个对象(自映射)

set == map

定义使用set的时候只需要传入一个类型参数,这个类型即是key,也是value。 实际上, set是map的特殊情况 ,虽然set没有键值对这种元素形式,但set的key本身就是value,map上键值对得映射在这里可以看作是元素本身到本身的映射。 所以说, 两者在实现上应该是有非常大的重合的 。 而从概念上来说,set完全可以由map来实现,从而成为一个容器适配器。 但没有那么做的原因,我想最大程度上是为了节约内存吧,value值的保存完全是没有必要的。

实现

通过查看VS 2013版本的C++头文件可以发现,set和map都是直接共有继承的_Tree类(红黑树),没有任何其他私有成员。 编码上的可重用性,佐证了上述想法。

与map不同之处

要说有什么不同,那就是set不提供元素修改的功能----没有operator[]、at函数。

一旦元素被插入集合,只能被删除,不能被重新赋值。 可能对于集合这个概念来说,修改元素的动作太不常见了,所以标准库索性就去掉了这个功能。

multiset

与multimap类似,这个类模版相当于是支持多个键值的set版本。

相关文章

  • 如何实现在C++中调用C函数

    如何实现在C++中调用C函数

    这篇文章主要介绍了如何实现在C++中调用C函数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • c++实现单纯形法现行规划问题的求解(推荐)

    c++实现单纯形法现行规划问题的求解(推荐)

    这篇文章主要介绍了c++实现单纯形法现行规划问题的求解,本文针对问题通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • C++中使用vector存储并遍历数据的基本步骤

    C++中使用vector存储并遍历数据的基本步骤

    C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,这篇文章主要介绍了C++中使用vector存储并遍历数据的基本步骤,需要的朋友可以参考下
    2025-01-01
  • C++遍历文件夹下文件的方法

    C++遍历文件夹下文件的方法

    这篇文章主要介绍了C++遍历文件夹下文件的方法,实例分析了C++针对文件夹遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Windows进程崩溃问题的定位方法

    Windows进程崩溃问题的定位方法

    这篇文章主要介绍了Windows进程崩溃问题的定位方法,本文使用nstd工具进行进程崩溃时内存和堆栈转储的方法查明问题所在,需要的朋友可以参考下
    2015-04-04
  • 深入C语言把文件读入字符串以及将字符串写入文件的解决方法

    深入C语言把文件读入字符串以及将字符串写入文件的解决方法

    本篇文章是对C语言把文件读入字符串以及将字符串写入文件的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言实现电话簿管理系统

    C语言实现电话簿管理系统

    这篇文章主要为大家详细介绍了C语言实现电话簿管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C++相交链表和反转链表详解

    C++相交链表和反转链表详解

    这篇文章主要介绍了C++相交链表和反转链表,结合实例形式分析了C++相交链表和反转链表的原理、实现方法及相关注意事项,需要的朋友可以参考下
    2021-08-08
  • C++实现洗牌发牌排序功能的示例代码

    C++实现洗牌发牌排序功能的示例代码

    本篇文章主要介绍了C++实现洗牌发牌排序功能的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • c++中const的使用详解

    c++中const的使用详解

    本篇文章是对c++中的const的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论