当前位置: 首页 > news >正文

网站开发软件培训/如何做网站优化seo

网站开发软件培训,如何做网站优化seo,申请建设网站的请示,企业名称预先核准网上申请目录 一、set 的介绍 1.1、set声明 1.2、基本使用 二、multiset的介绍 三、map的介绍 3.1、map的声明 3.2、基础使用 四、multimap 一、set 的介绍 1.1、set声明 从官网给的 set 的声明可以看到,set 一共三个模版参数,第一个是存储的数据类型&a…

目录

一、set 的介绍

1.1、set声明

1.2、基本使用

二、multiset的介绍

三、map的介绍

3.1、map的声明

3.2、基础使用

四、multimap


一、set 的介绍

1.1、set声明

从官网给的 set 的声明可以看到,set 一共三个模版参数,第一个是存储的数据类型,第二个是仿函数,第三个是空间适配器。其中仿函数和空间适配器都有缺省值,所以一般情况下我们使用时只需要传入当前对象存储的数据类型这一个模版参数就可以了。另外 set 的底层其实是基于红黑树实现的(平衡二叉搜索树的一种)。

1.2、基本使用

因为C++中 STL 容器方法的风格都很类似,所以这里就不一一介绍了,只是看一下大概都有哪些方法。如果看到不懂可以看前面其他容器部分的博客(尤其是string)或者看官网的解释。

官网:set - C++ Reference

构造函数

由图可知,set 支持空参构造,一段迭代器区间构造,拷贝构造。

迭代器部分较为常用的:

容量相关的:

插入删除等接口:

仿函数:

其余部分:

使用样例:

(1)插入,迭代器,范围for

从代码中可以看出 set 的迭代器走的是中序遍历(因为set底层是平衡二叉搜索树,中序遍历正好是升序)。

(2)删除

(3)find 和 count

find 的设计就是为了查找某一个元素,算法库里面是直接遍历所有数据的暴力查找,时间复杂度是O(N),而 set 自己的 find 利用了平衡二叉搜索树的性质,所以时间复杂度是O(log2N)。count 是返回 set 中某一个元素的个数,因为 set 中不允许有重复值,所以也可以用来查找,返回0就是没有,返回1就是有。

(4)lower_bound 和 upper_bound

二、multiset的介绍

multiset 和 set 的使用基本一致,只不过 multiset 允许键值冗余,即可以插入多个相同的key,而 set 不允许。

一些方法上的不同点:

当查找的值有多个时,multiset 的 find 方法返回的是中序遍历的第一个,且找到第一个我们就可以找到剩余的了。如图:

count方法:

erase方法删除的值有多份时会删除所有相同的值:

三、map的介绍

map和multimap参考⽂档:

<map> - C++ Reference

3.1、map的声明

map 是keyValue的模型,它有四个模版参数,一个key,一个value,这里命名为T,还有一个仿函数和空间适配器,不过仿函数和空间适配器都有缺省值,我们不传也可以。它的键值对并不是直接封装了两个成员变量,而是放到了一个叫做 pair 的结构体中,如图:

map 中封装一个这个结构体对象,然后将 key 和 value 封装到这个结构体中,它们在 pair 中的名称分别为 first 和 second。如图:

map底层是⽤红⿊树实现的,增删查改效率是O(logN) ,迭代器遍历是⾛的中序,所以是按key有序顺序遍历的。

3.2、基础使用

map对象的四种插入数据方式和一种初始化方式:

迭代器的使用:

(1)map中封装的pair类型并没有重载流插入和流提取,所以无法直接打印得到的pair对象,需要像图中一样直接打印结构体里的内容。

(2)这里打印的顺序和插入的顺序不一致,这是因为map插入数据时会按照key进行比较,形成一颗二叉搜索树,且迭代器是按照这颗二叉搜索树的中序进行遍历的。

另一种打印数据方式和范围for:

(1)因为map的底层存储的是自定义类型,所以它的迭代器重载了 -> 符号,可以让迭代器像结构体指针那样直接访问 pair 中的数据。 

(2)这里范围for建议加上引用来提高效率,如果只是 int 这种内置类型拷贝,不会很消耗效率,但是这里是一个结构体数据,大量的拷贝的话还是会对效率有影响的。

find方法:

map 的 find 方法传入 key 值进行查找,找到返回该数据位置的迭代器,找不到返回 end 迭代器。

 重载 [ ] 运算符:

声明:

功能:传入key值,返回value的引用。注意:传入的key是否存在都可以。

原理:我们先看官方文档中给的介绍。

图中的调用虽然非常繁杂,但是可以看出重载 [ ] 运算符底层是通过调用 insert 实现的,它利用了insert 方法的返回值。因为调用该运算符时只需要传入 key,所以这里调用insert方法时value是一个value类型的匿名对象。我们在看一下它所调用的这个 insert 的返回值。如图:

这个 insert 的重载函数需要一个 value_type 类型的参数,而这个类型实际上就是一个 pair 对象,重载[ ] 中调用该方法时传入的是 pair 对象,所以调用的是这个重载的 insert 。该 insert 方法的返回值是一个 pair 对象,当插入的 pair 对象中的 key 在 map 中不存在时,插入该对象,并将指向该新插入对象的迭代器和 true 封装到一个 pair 对象中返回;当插入的 pair 对象中的 key 已经存在时会将指向这个key所在的pair对象的迭代器和 false 封装到一个 pair 对象中,并返回回来。

上图中,红色的部分是在调用 insert 方法,蓝色的部分取出 insert 方法返回的 pair 对象中的迭代器,因为这个迭代器指向的是map中的某一个数据(pair对象),所以绿色部分是将该数据中的value值取出来。

我们既可以通过 [ ] 运算符进行新增插入数据,也可以查找指定key的value,或对value进行修改。如图:

四、multimap

multimap 和 map 的区别在于 multimap 允许键值冗余,map 不允许。如图:

因为有多个相同的 key,find 方法返回中序遍历的第一个。而且 multimap 不支持 [ ] 运算符了。剩余的方法的区别就像 set 与 multiset 的区别一样,可以类比学习。

http://www.whsansanxincailiao.cn/news/32005902.html

相关文章:

  • 网站建设的/西安做网站哪家好
  • 互联网工具型网站/提高网站排名的软件
  • 网站做图片的大小/百度seo还有前景吗
  • 国家政府网站/网站设计公司上海
  • 派设计包装设计网站/下载安装百度一下
  • 做网站付多少定金/百度竞价推广登陆
  • 网络专题策划方案/seo快排
  • 网站标题怎么隔开/网推什么平台好用
  • 济南建设设备安装有限责任公司官网/郑州seo顾问培训
  • 界面设计是什么专业/百度seo泛解析代发排名
  • 营销策划公司有哪些职位/关键词优化怎么操作
  • 企业网站方案/网络推广一般都干啥
  • 微信网站链接怎么做/成功的网络营销案例有哪些
  • 伊利集团网站建设实训/微信群推广平台有哪些
  • 企业级网站开发平台/企业网站营销的典型案例
  • 教做衣服的网站/电商网站卷烟订货流程
  • 有服务器域名源码怎么做网站平台/北京建站优化
  • 专业做网站的公司有哪些/佛山做网站推广的公司
  • 协会政府网站模版/纹身网站设计
  • ps上做网站/最近发生的热点新闻
  • 互联网哪个专业前景好/seo赚钱方式
  • 广西建设安全员证查询网站/网络推广最好的网站有哪些
  • 温州网站建设案例/淘宝推广工具
  • 做网站那个程序好/广州seo关键词优化是什么
  • 最新热点新闻事件素材/北京seo多少钱
  • 凡客网站的域名怎么做/优化网站的公司哪家好
  • 网站的建设与维护工资/seo门户
  • 北京顺义网站建设/宁波seo深度优化平台
  • wap网站制作哪家好/网店培训骗局
  • 千岛湖建设集团网站/网络销售管理条例