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

沈阳做网站费用百度云 wordpress 教程视频

沈阳做网站费用,百度云 wordpress 教程视频,圣诞树html网页代码,八上电脑课做网站需要什么软件一、set 1.1 set的基本概念 set是一种存储唯一元素的集合,具有有序性和自动排序的特性,底层是由红黑树实现,按键值排序。因为支持迭代器,在使用范围for按顺序输出元素时,默认得到的是按键值升序的序列。 1.2 set的使…

一、set

1.1 set的基本概念

        set是一种存储唯一元素的集合,具有有序性和自动排序的特性,底层是由红黑树实现,按键值排序。因为支持迭代器,在使用范围for按顺序输出元素时,默认得到的是按键值升序的序列。

1.2 set的使用

        set的接口与stack等有相似之处:

std::set<std::string> names;// 插入元素(自动去重)
names.insert("Alice");
names.emplace("Bob");  // 更高效// 查找操作
auto it = names.find("Charlie");
if (it != names.end()) {std::cout << "Found: " << *it << std::endl;
}// 范围查询
auto lower = names.lower_bound("A"); // 第一个>=A
auto upper = names.upper_bound("C"); // 第一个>C

        另外可以以及定义排序规则,在建立类模板的时候可以传入,类似于优先级队列:

struct CaseInsensitiveCompare {bool operator()(const std::string& a, const std::string& b) const {return std::lexicographical_compare(a.begin(), a.end(),b.begin(), b.end(),[](char c1, char c2) {return tolower(c1) < tolower(c2);});}
};std::set<std::string, CaseInsensitiveCompare> caseInsensitiveSet;

        而迭代器的使用,没有与list等相同,不做过多介绍。

1.3 multiset

        multiset和set的区别是,set不支持插入相同的值,而multiset可以插入相同的值,在使用erase删除某个具有重复值的键值时,会删除所有的重复值,并返回重复值的个数。

        使用find时,则返回的是中序遍历遇到的第一个要求找到的值的迭代器,如果没有找到则返回的是迭代器end()。

1.4 需要注意的点

        当使用键值进行inserts时,insert()返回的类型是pair<iterator, bool>,若插入成功这里的iterator指向的是插入值,若插入失败,这里的iterator指向的是与插入值相同的值的iterator。

1.5 pair

        pair是一个结构体,有两个成员变量分别是: first和second.

        在1.4中我们可以看到insert返回的类型是pair<iterator, bool>。那么,我们就可以通过访问first成员变量获得iterator,通过访问second获得bool。

总的来说,set有点类似于搜索二叉树,但是底层是红黑树,因此搜索效率相比搜索二叉树要更高,可以在插入数据时自动去重。若是有重复值的需求,可以使用multiset.

二、map

2.1基础概念

        map与set相似,也是以红黑树作为底层,但是与set不同的是,map的插入是以pair为基础,也就是插入时,需要输入键值对:

map<string, int> m;
m.insert(make_pair("Alice", 18));
m.insert(pair<string, int>("Bob", 13));

        map的排序也是默认以键值升序进行排序,而pair的第一个参数first就是键值,因此,在使用map时,插入已经存在的键值时,会插入失败,map会保留原来的键值对。

2.2 map的使用

        map的插入就如上文所述,需要注意的是,insert的返回值,与set的返回值类型相同,这里不再赘述。另外,也可以自定义排序规则类似于set。

        map的其他接口也都与set相似。

        但是map相比set有一个独特的用法,map重载了operator[],也就是说,可以使用[]直接访问map的元素:

        根据这个相同的调用方式,我们可以看到,[]实际上是调用了一个insert,并将返回得到的iterator的second返回。简而言之,使用方括号,如果括住的是已经有的键值,则会返回键值对应的value,如果括住的是没有的键值,那么就会插入进去,并且默认构造相应的value值,要修改value如下:

        由于返回是引用返回,可以直接在返回值上做修改,从而修改value值。

        最典型的用法如下:

int main(void) {map<string, int> m;vector<string> vs = { "i","love","leetcode","i","love","coding" };for (auto& e : vs) {m[e]++;}for (auto& e : m) {cout << e.first << ":" << e.second << endl;}return 0;
}

        即统计相同单词出现的次数 ,而代码中m[e]++,就是巧妙的利用了operator[]的特性。

2.3 multimap

        multimap与multiset相同,都是为了支持重复键值而出现的,使用接口也都类似,这里不做过多介绍。

        总的来说,map与set在数据处理领域具有重要地位,使用时要利用好其有序性和自动排序。同时,也要根据实际的运用环境使用合适的容器,例如:如果只是处理在不在的问题,就可以使用set减少存储空间的浪费;而如果是要处理key-value问题,例如统计重复出现的单词次数,就可以考虑使用map。

http://www.dtcms.com/wzjs/828638.html

相关文章:

  • 传媒公司网站建设策划冠辰网站建设
  • 施工方案下载免费网站vue 微信公众号开发
  • 餐饮技术支持东莞网站建设网站做戒酒通知书
  • 医药招商网站大全山东做公司网站
  • 番禺网站建设设计重庆建设工程安全管理平台
  • 服装企业网站模版云seo关键词排名优化软件
  • 网站前置审批类型杭州专业网站建设在哪里
  • asp网站后台管理系统源码泉州排名推广
  • 企业网站建设的提案营销网络信息化的作用有哪些
  • 一个成功的网站要具备哪些方面开先建设集团网站
  • 有没有专门做家纺的网站百姓网个人征婚
  • 网站开发不兼容ie8哈尔滨建设工程造价信息网
  • 网站死链怎么办快递网站建站需要什么
  • 北京网站建设兼职网站开发主要内容和要求
  • 怎么样建立自己的视频网站建设景区网站要有的内容
  • 做的比较好的网站推荐网页开发公司网站
  • 网站备案信息登记表佛山seo培训
  • 公司网站建设制作建程网会员
  • 哪家做网站好的邮件更新wordpress
  • 国外虚拟主机 两个网站龙胜做网站的公司
  • 茌平网站建设价格搭建网站是什么专业
  • 三亚 网站建设2017网站开发就业前景
  • 四川做网站多少钱信息网络技术
  • 介绍移动互联网的网站有哪些网页制作素材及流程
  • 网站信息发布河南建筑公司网站
  • 网站建设文化方案网站页面设计和结构的技巧
  • 什么是网页设计与网站建设大一html网页制作
  • 柳州网站建设33重庆网站制作公司重庆
  • 长乐区建设局网站湖南中耀建设集团有限公司网站
  • 山西网站的公司企业网站的首页设计