【C++STL】set

这篇具有很好参考价值的文章主要介绍了【C++STL】set。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

前面的C++STL的博客,我们介绍了string,vector,list,deque,priority_queue还有stack和queue。
这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。
而从本节开始,我们就要开始学习关联式容器。

【C++STL】set

一. 关联式容器

关联式容器也是用来存储数据的,但与序列式容器不同的是,其里面存储的是<key,value>结构的键值对,在数据检索时比序列容器效率更高
更多对< key >和<key,value>区别的理解,请见[C++]二叉树搜索树的应用


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

其中T1 first代表keyT2 second代表value。key和value的类型需要由使用者指定

二. set的特殊使用

【C++STL】set

T:set中存放元素的类型,实际在底层存储<value,value>的键值对
Compare:set中元素默认按照小于类比较
Alloc:set中元素空间的管理方式,使用STL提供的空间配置器管理

set是按照一定次序存储元素的容器
底层使用二叉搜索树(红黑树)实现,所以其中序遍历出来的结果,默认是升序的。


特性1
set由于是key的模型,所以不允许数据冗余
【C++STL】set

  1. 允许插入与模板参数相同的val值
  2. 允许在迭代器position位置插入val值
  3. 允许插入迭代器区间

【C++STL】set
可以看到,2和3我们都分别插入了2次,但在set中只实际存储了各1次。因为后一次的插入其实是失败的。


特性2
因为底层是二叉搜索树,有特殊的结构,所以不允许key值的修改。
同时为了不允许修改key值,set的普通迭代器其实有const迭代器的效果
【C++STL】set


count()
【C++STL】set
count()的作用是返回val值的个数
【C++STL】set

set因为二叉搜索树的底层结构,所以其数据有排序+去重两个效果

三. multiset

multiset和set最大的不同就是,multiset允许数据冗余
【C++STL】set

而当使用find查找时,多个重复数据,find返回的其实是中序遍历的第一个
【C++STL】set

结束语

感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
【C++STL】set文章来源地址https://www.toymoban.com/news/detail-425589.html

到了这里,关于【C++STL】set的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STL】string的使用

    放在专栏【 C++知识总结 】,会持续更新,期待支持 🌹 STL为英文Standard Template Library的缩写,译为 标准模板库 。 是C++标准库的重要组成部分 。 长久以来,软件届一直希望建立一种可重复运用的东西。所谓的泛型思想以及面向对象最主要的目的就是为了复用性的提升 复用性

    2024年02月05日
    浏览(58)
  • STL string

    计算机中只能存储二进制,不能存储现实生活中的文字,于是需要对文字进行编码 输入文字时,计算机根据编码表,将文字转换为对应的二进制,输出文字时,计算机根据编码表,将二进制转换为对应的文字 ASCII 码就是为了可以在计算机中存储和显示英文信息 由于计算机的

    2024年02月12日
    浏览(39)
  • 【剖析STL】String

    标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽说它主要出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。STL的代码从广义上讲分为三类:algorithm(

    2024年02月04日
    浏览(39)
  • 【STL】手撕 string类

    目录 1,string类框架 2,string(构造) 3,~string(析构) 4,swap(交换) 5,string(拷贝构造) 1,常规法 2,简便法 6,size (字符长度) 7,c_str(返回字符形式的指针) 8,iterator(迭代器) 9,operator=(赋值) 1,常规写法 2,简便法 10,operator[](取值) 11,reserve(空间容量

    2024年02月04日
    浏览(41)
  • 【c++】STL--string

            最开始我们学习c语言的时候,我们发现刷题或者写代码都是比较麻烦的,如果说用c语言造一辆车,那么我需要用c语言先把轮子造好--各个零件,当我们造好之后再组装。那么c++则是造好了轮子,只需要我们组装就好了。这里的的STL里有各个组件,我只要熟悉的掌握

    2024年02月03日
    浏览(49)
  • C++ STL string类

    目录 一.为什么学习string类 (1) C语言中的字符串 (2)标准库里面的string类 二. string类的常用接口说明 (1)string类对象的常见构造 (2)string类对象的容量操作 1.size(),length(). 2. capacity() 3.empty()  4.clear()  5.reserve()  6.resize() (3)string类对象的访问及遍历操作  1.operator[ pos

    2024年02月13日
    浏览(36)
  • <C++_STL> string

    C语言中, 字符串 是以 \\\'\\0\\\' 结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会 越界访问 。 1.string类是表示字符序列的类 2.标准的st

    2024年02月03日
    浏览(41)
  • STL-string-1

    Convert string to integer 解析str,将其内容解释为指定基数的整数,该整数作为int值返回。 如果idx不是空指针,函数还会将idx的值设置为str中数字后面第一个字符的位置。 函数使用strtol(或wcstol)来执行转换(有关过程的更多详细信息,请参阅strtol)。 Convert string to long int 解析

    2024年02月07日
    浏览(39)
  • STL-string-2

    Iterators   Capacity Resize string 将字符串的大小调整为n个字符的长度。 如果n小于当前字符串长度,则当前值将缩短为其第一个n字符,删除第n个字符之后的字符。 如果n大于当前字符串长度,则通过在末尾插入所需数量的字符以达到n的大小来扩展当前内容。如果指定了c,则将新

    2024年02月09日
    浏览(48)
  • STL常用容器—string容器

    本质: string是C++风格的字符串,而string本质上是一个类 string和char * 区别: char * 是一个指针 string是一个类,类内部封装了char *,管理这个字符串,是一个char *型的容器。 特点: string 类内部封装了很多成员属性和方法 string管理char*所分配的内存,不用担心复制越界和取值越

    2024年01月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包