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

企业网站建设相关书籍免费的网站托管

企业网站建设相关书籍,免费的网站托管,免费的产品展示小程序,在线营销网站建设​ ​#x1f4dd;个人主页#xff1a;Sherry的成长之路 #x1f3e0;学习社区#xff1a;Sherry的成长之路#xff08;个人社区#xff09; #x1f4d6;专栏链接#xff1a;C学习 #x1f3af;长路漫漫浩浩#xff0c;万事皆有期待 上一篇博客#xff1a;【C】STL…​ ​个人主页Sherry的成长之路 学习社区Sherry的成长之路个人社区 专栏链接C学习 长路漫漫浩浩万事皆有期待 上一篇博客【C】STL详解五—— list的介绍及使用 文章目录 unordered系列关联式容器unordered_set的介绍unordered_set的使用unordered_set接口的使用unordered_multiset unordered_map的介绍unordered_map的使用unordered_map的定义方式unordered_map接口的使用unordered_multimap 总结 unordered系列关联式容器 在C98中STL提供了底层为红黑树结构的一系列关联式容器在查询时的效率可达到O(logN)即最差情况下需要比较红黑树的高度次当树中的结点非常多时查询效率也不理想。最好的查询是进行很少的比较次数就能够将元素找到因此在C11中STL又提供了4个unordered系列的关联式容器这四个容器与红黑树结构的关联式容器使用方式基本类似只是其底层结构不同。 unordered_set的介绍 unordered_set是不按特定顺序存储键值的关联式容器其允许通过键值快速的索引到对应的元素。 在unordered_set中元素的值同时也是唯一地标识它的key。 在内部unordered_set中的元素没有按照任何特定的顺序排序为了能在常数范围内找到指定的keyunordered_set将相同哈希值的键值放在相同的桶中。 unordered_set容器通过key访问单个元素要比set快但它通常在遍历元素子集的范围迭代方面效率较低。 它的迭代器至少是前向迭代器。 unordered_set的使用 unordered_set的定义方式 方式一 构造一个某类型的空容器。 unordered_setint us1; //构造int类型的空容器方式二 拷贝构造某同类型容器的复制品。 unordered_setint us2(us1); //拷贝构造同类型容器us1的复制品方式三 使用迭代器拷贝构造某一段内容。 string str(abcedf); unordered_setchar us3(str.begin(), str.end()); //构造string对象某段区间的复制品unordered_set接口的使用 unordered_set当中常用的成员函数如下 成员函数 功能 insert 插入指定元素 erase 删除指定元素 find 查找指定元素 size 获取容器中元素的个数 empty 判断容器是否为空 clear 清空容器 swap 交换两个容器中的数据 count 获取容器中指定元素值的元素个数unordered_set当中迭代器相关函数如下 成员函数 功能 begin 获取容器中第一个元素的正向迭代器 end 获取容器中最后一个元素下一个位置的正向迭代器使用示例 #include iostream #include unordered_set using namespace std;int main() {unordered_setint us;//插入元素去重us.insert(1);us.insert(4);us.insert(3);us.insert(3);us.insert(2);us.insert(2);us.insert(3);//遍历容器方式一范围forfor (auto e : us){cout e ;}cout endl; //1 4 3 2//删除元素方式一us.erase(3);//删除元素方式二unordered_setint::iterator pos us.find(1); //查找值为1的元素if (pos ! us.end()){us.erase(pos);}//遍历容器方式二迭代器遍历unordered_setint::iterator it us.begin();while (it ! us.end()){cout *it ;it;}cout endl; //4 2//容器中值为2的元素个数cout us.count(2) endl; //1//容器大小cout us.size() endl; //2//清空容器us.clear();//容器判空cout us.empty() endl; //1//交换两个容器的数据unordered_setint tmp{ 11, 22, 33, 44 };us.swap(tmp);for (auto e : us){cout e ;}cout endl; //11 22 33 44return 0; } unordered_multiset unordered_multiset容器与unordered_set容器的底层数据结构是一样的都是哈希表其次它们所提供的成员函数的接口都是基本一致的这里就不再列举了这两种容器唯一的区别就是unordered_multiset容器允许键值冗余即unordered_multiset容器当中存储的元素是可以重复的。 #include iostream #include unordered_set using namespace std;int main() {unordered_multisetint ums;//插入元素允许重复ums.insert(1);ums.insert(4);ums.insert(3);ums.insert(3);ums.insert(2);ums.insert(2);ums.insert(3);for (auto e : ums){cout e ;}cout endl; //1 4 3 3 3 2 2return 0; }由于unordered_multiset容器允许键值冗余因此该容器中成员函数find和count的意义与unordered_set容器中的也有所不同 成员函数find 功能 unordered_set容器 返回键值为val的元素的迭代器 unordered_multiset容器 返回底层哈希表中第一个找到的键值为val的元素的迭代器成员函数count 功能 unordered_set容器 键值为val的元素存在则返回1不存在则返回0find成员函数可替代 unordered_multiset容器 返回键值为val的元素个数find成员函数不可替代unordered_map的介绍 unordered_map是存储key, value键值对的关联式容器其允许通过key值快速的索引到与其对应是value。 在unordered_map中键值通常用于唯一地标识元素而映射值是一个对象其内容与此键关联。键和映射值的类型可能不同。 在内部unordered_map没有对key, value按照任何特定的顺序排序为了能在常数范围内找到key所对应的valueunordered_map将相同哈希值的键值对放在相同的桶中。 unordered_map容器通过key访问单个元素要比map快但它通常在遍历元素子集的范围迭代方面效率较低。 unordered_map实现了直接访问操作符operator[]它允许使用key作为参数直接访问value。 它的迭代器至少是前向迭代器。 unordered_map的使用 unordered_map的定义方式 方式一 指定key和value的类型构造一个空容器。 unordered_mapint, double um1; //构造一个key为int类型value为double类型的空容器方式二 拷贝构造某同类型容器的复制品。 unordered_mapint, double um2(um1); //拷贝构造同类型容器um1的复制品方式三 使用迭代器拷贝构造某一段内容。 unordered_mapint, double um3(um2.begin(), um2.end()); //使用迭代器拷贝构造um2容器某段区间的复制品unordered_map接口的使用 unordered_map当中常用的成员函数如下 成员函数 功能 insert 插入键值对 erase 删除指定key值的键值对 find 查找指定key值的键值对 size 获取容器中元素的个数 empty 判断容器是否为空 clear 清空容器 swap 交换两个容器中的数据 count 获取容器中指定key值的元素个数除了上述的成员函数之外unordered_map容器当中还实现了[ ]运算符重载函数该重载函数的功能非常强大 若当前容器中已有键值为key的键值对则返回该键值对value的引用。 若当前容器中没有键值为key的键值对则先插入键值对key, value()然后再返回该键值对中value的引用。 unordered_map当中迭代器相关函数如下 成员函数 功能 begin 获取容器中第一个元素的正向迭代器 end 获取容器中最后一个元素下一个位置的正向迭代器使用示例 #include iostream #include string #include unordered_map using namespace std;int main() {unordered_mapint, string um;//插入键值对方式一构造匿名对象插入um.insert(pairint, string(1, one));um.insert(pairint, string(2, two));um.insert(pairint, string(3, three));//遍历方式一范围forfor (auto e : um){cout e.first - e.second ;}cout endl; //1-one 2-two 3-three//插入键值对方式二调用make_pair函数模板插入um.insert(make_pair(4, four));um.insert(make_pair(5, five));um.insert(make_pair(6, six));//遍历方式二迭代器遍历unordered_mapint, string::iterator it um.begin();while (it ! um.end()){cout it-first - it-second ;it;}cout endl; //1-one 2-two 3-three 4-four 5-five 6-six//插入键值对方式三利用[]运算符重载函数进行插入常用um[7] seven;um[8] eight;um[9] nine;for (auto e : um){cout e.first - e.second ;}cout endl; //9-nine 1-one 2-two 3-three 4-four 5-five 6-six 7-seven 8-eight//删除键值对方式一根据key值删除um.erase(5);//删除键值对方式二根据迭代器删除unordered_mapint, string::iterator pos um.find(7); //查找键值为7的键值对if (pos ! um.end()){um.erase(pos);}for (auto e : um){cout e.first - e.second ;}cout endl; //9-nine 1-one 2-two 3-three 4-four 6-six 8-eight//修改键值对方式一通过find获得迭代器通过迭代器修改pos um.find(1);if (pos ! um.end()){pos-second one/first;}//修改键值对方式二利用[]运算符重载函数进行修改常用um[2] two/second;for (auto e : um){cout e.first - e.second ;}cout endl; //9-nine 1-one/first 2-two/second 3-three 4-four 6-six 8-eight//容器中key值为3的键值对的个数cout um.count(3) endl;//容器的大小cout um.size() endl;//清空容器um.clear();//容器判空cout um.empty() endl;//交换两个容器的数据unordered_mapint, string tmp{ { 2021, before }, { 2022, now } };um.swap(tmp);for (auto e : um){cout e.first - e.second ;}cout endl; //2021-before 2022-nowreturn 0; }unordered_multimap unordered_multimap容器与unordered_map容器的底层数据结构是一样的都是哈希表其次它们所提供的成员函数的接口都是基本一致的这里就不再列举了这两种容器唯一的区别就是unordered_multimap容器允许键值冗余即unordered_multimap容器当中存储的键值对的key值是可以重复的。 #include iostream #include string #include unordered_map using namespace std;int main() {unordered_multimapint, string umm;//插入键值对允许键值重复umm.insert(make_pair(2022, 吃饭));umm.insert(make_pair(2022, 睡觉));umm.insert(make_pair(2022, 敲代码));for (auto e : umm){cout e.first - e.second ;}cout endl; //2022-吃饭 2022-睡觉 2022-敲代码return 0; }由于unordered_multimap容器允许键值对的键值冗余因此该容器中成员函数find和count的意义与unordered_map容器中的也有所不同 成员函数find 功能 unordered_map容器 返回键值为key的键值对的迭代器 unordered_multimap容器 返回底层哈希表中第一个找到的键值为key的键值对的迭代器成员函数count 功能 unordered_map容器 键值为key的键值对存在则返回1不存在则返回0find成员函数可替代 unordered_multimap容器 返回键值为key的键值对的个数find成员函数不可替代其次由于unordered_multimap容器允许键值对的键值冗余调用[ ]运算符重载函数时应该返回键值为key的哪一个键值对的value的引用存在歧义因此在unordered_multimap容器当中没有实现[ ]运算符重载函数。 总结 今天我们比较详细地完成了 unordered_set、unordered_map的介绍及使用了解了一些有关的底层原理。接下来我们用哈希表封装出unordered_map和unordered_set。希望我的文章和讲解能对大家的学习提供一些帮助。 当然本文仍有许多不足之处欢迎各位小伙伴们随时私信交流、批评指正我们下期见~
http://www.hkea.cn/news/14410266/

相关文章:

  • 利用ps制作网站的设计东莞外贸公司建网站
  • 做a网站百分百营销软件
  • 赣榆网站建设简述网站开发工作流程
  • 可视化拖拽网站建设软件石家庄城乡建设厅网站
  • 给企业做网站公司酒店 wordpress
  • 百度移动网站排名网站推广公司排行榜
  • 山东网站推广网站建设步骤大全
  • 网站建设和管理颁奖WordPress博客设置最新文章
  • 东兰县建设局网站福建城乡建设网站
  • 在网站建设流程中编程属于()阶段wordpress购买阅读
  • 培训网站大全wordpress本地化插件
  • 金汇网站建设微信开发者工具官网下载电脑版
  • 上海建站哪家好wordpress主动推送
  • 网站怎样绕过360认证赣州市做网站设计
  • 怎么免费制作一个网站怎么做网站跳转链接
  • 网站可以给pdf做笔记表白网页制作源码
  • 电子商务网站建设知识点总结安阳信息网官网
  • p2p网站建设规划揭阳网站开发
  • 长治网站建设收费多少有那些网站
  • 网站建设的体会网站开发的项目开发
  • 卖服务器建网站免费的网络会议系统
  • 常熟智能网站建设3d网站制作
  • 青海建设云网站北京制作网站软件
  • 企业网址免费注册营销型企业网站优化
  • 怎么向企业推销网站建设在越南做网站都是什么人
  • 农业种植养殖网站建设开一个网站多少钱
  • 湖北省麻城建设局官方网站手机网站页面设计
  • 网站前置审批流程下列关于seo优化说法不正确的是
  • cpa推广做网站手机网站建设的规划
  • 网站创建要多少钱光触媒网站建设