网上做网站资金大概多少公司网站后台管理
2026/4/15 6:31:22 网站建设 项目流程
网上做网站资金大概多少,公司网站后台管理,平台戚里带崇墉,wordpress有手机版么一. 核心认知#xff1a;unordered 系列容器是什么#xff1f; unordered_map 和 unordered_set 是 C11 引入的关联式容器#xff0c;底层基于 哈希表#xff08;哈希桶#xff09; 实现#xff0c;核心特点如下#xff1a; 存储特性#xff1a;unordered_set 存储单…一. 核心认知unordered 系列容器是什么unordered_map 和 unordered_set 是 C11 引入的关联式容器底层基于哈希表哈希桶实现核心特点如下存储特性unordered_set 存储单个 key去重 无序unordered_map 存储 key-value 对key 去重 无序效率增删查改平均时间复杂度 O (1)最坏情况 O (N)哈希冲突严重时迭代器单向迭代器不支持 – 操作遍历结果无序对 key 的要求需支持 “转换为整形”哈希函数需求和 “相等比较”冲突判断需求。二. 模板参数与基础接口2.1 模板参数一般来说后面三个参数我们都不需要传。2.2 核心接口与 map/set 高度一致无论是unordered_map还是unordered_set核心接口与 map/set 完全兼容上手零成本(这里仅展示部分接口剩下的可以看看文档还有些和map/set不一样的后续讲实现的时候还会再进行补充的unordered_set 核心接口#include unordered_set using namespace std; int main() { unordered_setint us; // 插入返回pairiterator, boolbool标记是否插入成功 us.insert(10); us.insert({ 20, 30, 40 }); // 查找返回迭代器未找到返回end() auto it us.find(20); if (it ! us.end()) { // 找到处理 } // 删除按key删除返回删除个数 us.erase(30); // 其他常用接口 us.size(); // 元素个数 us.empty(); // 是否为空 us.clear(); // 清空容器 }unordered_map 核心接口#include unordered_map using namespace std; int main() { unordered_mapstring, int um; // 插入 um.insert({ sort, 1 }); um.insert(make_pair(left, 2)); // []运算符插入访问/修改最常用 um[right] 3; // 插入 um[left] 22; // 修改 // 查找 auto it um.find(sort); if (it ! um.end()) { cout it-first : it-second endl; } // 删除 um.erase(right); }2.3 支持冗余的版本unordered_multiset/unordered_multimap与 multiset/multimap 类似支持 key 重复unordered_multiset允许相同 key 重复插入遍历无序unordered_multimap允许相同 key 重复插入不支持 [] 运算符key 不唯一核心差异无去重机制其他接口与 unordered_map/unordered_set 一致。三. 关键差异unordered 系列 vs map/set对比维度unordered_map/unordered_setmap/set底层结构哈希表数组 链表/红黑树有序按 key 默认升序排列元素顺序无序取决于哈希函数有序按 key 默认升序排列时间复杂度平均O(1)最差O(n)稳定O(logN)迭代器特性单向迭代器仅支持向前遍历双向迭代器支持向前/向后遍历对 Key 的要求1. 支持比较2. 可计算哈希值支持比较或自定义严格弱序内存占用较高需预留桶空间减少冲突较低树结构紧凑无预留开销数据分布数据分散在桶中数据在树结构中平衡分布主要优势极速查找常数级平均时间有序遍历、稳定性能典型场景高频查询、缓存系统、去重操作需要有序数据、范围查询、顺序相关操作选择建议要极致速度→ 选unordered_xxx要顺序访问→ 选map/set四. 性能实测谁更快测试代码核心逻辑// 测试环境VS2022Release 模式 #define _CRT_SECURE_NO_WARNINGS 1 #includeiostream #includeunordered_set #includeunordered_map #includeset using namespace std; void test_unset1() { const size_t N 1000000; unordered_setint us; setint s; vectorint v; v.reserve(N); srand(time(0)); for (size_t i 0; i N; i) { v.push_back(rand()); // N比较大时重复值比较多 //v.push_back(rand() i); // 重复值相对少 //v.push_back(i); // 没有重复有序 } size_t begin1 clock(); for (auto e : v) { s.insert(e); } size_t end1 clock(); cout set insert: end1 - begin1 endl; size_t begin2 clock(); us.reserve(N); for (auto e : v) { us.insert(e); } size_t end2 clock(); cout unordered_set insert: end2 - begin2 endl; int m1 0; size_t begin3 clock(); for (auto e : v) { auto ret s.find(e); if (ret ! s.end()) { m1; } } size_t end3 clock(); cout set find: end3 - begin3 - m1 endl; int m2 0; size_t begin4 clock(); for (auto e : v) { auto ret us.find(e); if (ret ! us.end()) { m2; } } size_t end4 clock(); cout unorered_set find: end4 - begin4 - m2 endl; cout 插入数据个数 s.size() endl; cout 插入数据个数 us.size() endl endl; size_t begin5 clock(); for (auto e : v) { s.erase(e); } size_t end5 clock(); cout set erase: end5 - begin5 endl; size_t begin6 clock(); for (auto e : v) { us.erase(e); } size_t end6 clock(); cout unordered_set erase: end6 - begin6 endl endl; } int main() { test_unset1(); return 0; }三组测试结果关键结论unordered 系列在插入、查找、删除场景下均显著快于 map/set尤其是高频查询场景unordered 系列使用时建议先用reserve(N)预分配空间避免频繁扩容导致性能下降数据量越小性能差距越不明显数据量越大unordered 系列的优势越突出数据有序时unoredered系列的插入效率没set高。unordered_xxx的哈希相关接口Buckets和Hash policy系列的接口分别是跟哈希桶和负载因子相关的接口日常使用的角度我们不需要太关注后面学习了哈希表底层我们再来看这个系列的接口一目了然。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询