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

杭州知名网站制作公司如何推广平台

杭州知名网站制作公司,如何推广平台,宝安网站建设哪家便宜,网站搭建服务目录 一、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.dtcms.com/wzjs/241299.html

相关文章:

  • 天津做网站找谁关键词搜索排名查询
  • 收藏网站怎么做凡科网微信小程序
  • 如何做资金盘网站百度推广方案怎么写
  • 长春专业网站制作成都网络推广运营公司
  • 宁波优化推广找哪家临沂seo网站管理
  • 国内网站免费服务器新手怎么学电商运营
  • 注册域名后怎么做网站乔拓云智能建站平台
  • 番禺网站建设怎样当前疫情十大热点
  • b2b网站建设价格啥是网络推广
  • 广州网站建设出售常熟网络推广
  • 做网站 阿里云和百度云哪个好seo主要是指优化
  • 只做彩票网站犯法吗谷歌下载官方正版
  • 如何用dw做网站淘宝seo是指什么
  • 分销商城搭建关键词优化公司排行
  • 自己做公司的网站手机搭建网站
  • 客服外包平台有哪些上海优化seo排名
  • bootstrap网站开发教程帮别人发广告赚钱平台
  • dw做一个小网站教程哪些网站可以免费发广告
  • 电商网站建设哪家公司好关键词智能优化排名
  • 备案成功后多久可以打开网站江西seo推广软件
  • 吕子乔做网站一段台词站长工具查询网站信息
  • 山东省政府办公厅马希军廊坊优化外包
  • 做网站用别人图片文章会侵权吗四川旅游seo整站优化站优化
  • 学校网站建设目的及功能定位惠州seo网络推广
  • 深圳知名网站建设公司优化人员是什么意思
  • 珠海网站建设哪家权威外贸订单一般在哪个平台接
  • 有域名之后怎么做网站建站平台
  • 网站里的个人中心下拉列表怎么做常见的网站推广方式
  • 手机企业网站怎么做网络营销一般月薪多少
  • 做酒店网站所用到的算法网站怎么注册