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

电商网站流量统计wordpress自带301

电商网站流量统计,wordpress自带301,网站备案,晋中城市建设招标网站目录 📌 一、std::map 与 std::unordered_map 概述 📌 二、std::map 详解 1. 核心特性 2. 常用函数解析 3. 性能优势 📌 三、std::unordered_map 详解 1. 核心特性 2. 常用函数解析 3. 性能优势 📌 四、std::map 与 std…

目录

📌 一、std::map 与 std::unordered_map 概述

📌 二、std::map 详解

1. 核心特性

2. 常用函数解析

3. 性能优势

📌 三、std::unordered_map 详解

1. 核心特性

2. 常用函数解析

3. 性能优势

📌 四、std::map 与 std::unordered_map 对比

📌 五、性能优化建议

1. std::map 优化

2. std::unordered_map 优化

📌 六、常见陷阱与解决方案

1. 哈希冲突陷阱

2. 键类型不可变陷阱

3. 自定义键类型陷阱

📌 七、典型应用场景

1. std::map 的应用场景

2. std::unordered_map 的应用场景

🧠 总结

C++从入门到入土学习导航_c++学习进程-CSDN博客


📌 一、std::map 与 std::unordered_map 概述

std::mapstd::unordered_map 是 C++ STL 中的 关联容器,用于存储键值对(Key-Value)。它们的核心区别在于:

特性std::mapstd::unordered_map
底层实现红黑树(平衡二叉搜索树)哈希表(基于链地址法或开放寻址法)
有序性键值对按键有序排列键值对无序存储
插入/删除效率O(log n)平均 O(1),最坏 O(n)(哈希冲突严重时)
查找效率O(log n)平均 O(1),最坏 O(n)
内存占用较高(红黑树节点存储父/子指针)较低(哈希表存储桶和键值对)
适用场景需要有序性或范围查询高效查找且无需有序性

📌 二、std::map 详解

1. 核心特性

  • 红黑树实现:基于自平衡二叉搜索树,保证键值对按键有序。
  • 有序性:元素按键升序排列(默认),支持范围查询。
  • 时间复杂度:插入、删除、查找均为 O(log n)。
  • 键唯一性:不允许重复键,插入时会检查键是否存在。

2. 常用函数解析

#include <map>
#include <iostream>int main() {// 1. 初始化std::map<int, std::string> m1;          // 空 mapstd::map<int, std::string> m2 = {{1, "one"}, {2, "two"}};  // 列表初始化// 2. 插入与删除m1.insert({3, "three"});                // 插入键值对m1[4] = "four";                         // 使用 operator[] 插入或修改m1.erase(3);                            // 删除键为 3 的元素// 3. 查找与访问auto it = m1.find(2);                   // 查找键为 2 的元素if (it != m1.end()) {std::cout << it->second << std::endl;  // 输出 "two"}// 4. 范围查询auto lb = m1.lower_bound(1);            // 返回 >=1 的第一个元素auto ub = m1.upper_bound(2);            // 返回 >2 的第一个元素auto range = m1.equal_range(2);         // 返回 lower_bound 和 upper_bound// 5. 遍历for (const auto& [key, value] : m1) {std::cout << key << " => " << value << std::endl;}return 0;
}

3. 性能优势

  • 有序性:按键排序,适合范围查询(如 lower_bound/upper_bound)。
  • 稳定性:插入/删除操作不会使现有迭代器失效(除非删除目标节点)。
  • 适用场景:需要按键排序、范围查询或维护键值顺序的场景。

📌 三、std::unordered_map 详解

1. 核心特性

  • 哈希表实现:基于哈希函数计算键的存储位置,平均查找效率高。
  • 无序性:键值对的存储顺序与插入顺序无关。
  • 时间复杂度:平均插入/删除/查找为 O(1),最坏情况下退化为 O(n)(哈希冲突严重时)。
  • 键唯一性:不允许重复键,插入时会检查键是否存在。

2. 常用函数解析

#include <unordered_map>
#include <iostream>int main() {// 1. 初始化std::unordered_map<int, std::string> um1;  // 空 unordered_mapstd::unordered_map<int, std::string> um2 = {{1, "one"}, {2, "two"}};  // 列表初始化// 2. 插入与删除um1.insert({3, "three"});               // 插入键值对um1[4] = "four";                        // 使用 operator[] 插入或修改um1.erase(3);                           // 删除键为 3 的元素// 3. 查找与访问auto it = um1.find(2);                  // 查找键为 2 的元素if (it != um1.end()) {std::cout << it->second << std::endl;  // 输出 "two"}// 4. 哈希控制um1.reserve(100);                       // 预分配桶数量um1.max_load_factor(0.5);               // 设置最大负载因子um1.rehash(200);                        // 强制重新哈希// 5. 遍历for (const auto& [key, value] : um1) {std::cout << key << " => " << value << std::endl;}return 0;
}

3. 性能优势

  • 高效查找:哈希表实现使得平均查找效率接近 O(1)。
  • 动态扩容:通过 load_factor 和 rehash 控制哈希冲突。
  • 适用场景:高频查找、插入/删除且无需有序性的场景。

📌 四、std::map 与 std::unordered_map 对比

特性std::mapstd::unordered_map
底层实现红黑树哈希表
有序性键有序键无序
插入/删除效率O(log n)平均 O(1),最坏 O(n)
查找效率O(log n)平均 O(1),最坏 O(n)
内存占用较高(红黑树节点)较低(哈希表桶)
适用场景有序性需求、范围查询高效查找、无需有序性

📌 五、性能优化建议

1. std::map 优化

  • 利用有序性:优先使用 lower_bound/upper_bound 进行范围查询。
  • 避免频繁插入/删除:红黑树的旋转和调整可能影响性能。
  • 自定义比较函数:对于复杂键类型,提供自定义比较器以提升效率。

2. std::unordered_map 优化

  • 优化哈希函数:自定义键类型的哈希函数需满足离散性和均匀分布。
  • 控制负载因子:通过 max_load_factor 和 rehash 减少哈希冲突。
  • 预分配桶数量:使用 reserve 预分配桶,避免频繁扩容。
  • 避免 operator[] 自动插入:使用 find + insert 避免不必要的默认值插入。

📌 六、常见陷阱与解决方案

1. 哈希冲突陷阱

  • 问题:哈希冲突严重时,std::unordered_map 性能退化为 O(n)。
  • 解决方案:优化哈希函数、调整负载因子、使用 rehash
std::unordered_map<std::string, int> um;
um.max_load_factor(0.5);  // 降低负载因子以减少冲突
um.rehash(1000);          // 强制重新哈希

2. 键类型不可变陷阱

  • 问题:修改键值会导致哈希值变化,元素无法正确定位。
  • 解决方案:确保键类型不可变,或重新插入修改后的键值对。
// 错误示例:修改键值会导致元素丢失
struct MyKey {int id;bool operator==(const MyKey& o) const { return id == o.id; }
};
namespace std {
template<> struct hash<MyKey> {size_t operator()(const MyKey& k) const { return k.id; }
};
}
MyKey key = {1};
um[key] = 100;
key.id = 2;  // 修改键值,导致哈希值变化
auto it = um.find(key);  // 无法找到原键值对

3. 自定义键类型陷阱

  • 问题:未正确实现 operator== 和 std::hash 导致冲突。
  • 解决方案:确保键类型满足哈希函数的离散性和比较逻辑。
// 自定义键类型示例
struct MyKey {int id;std::string name;bool operator==(const MyKey& o) const {return id == o.id && name == o.name;}
};
namespace std {
template<> struct hash<MyKey> {size_t operator()(const MyKey& k) const {return hash<int>()(k.id) ^ (hash<std::string>()(k.name) << 1);}
};
}

📌 七、典型应用场景

1. std::map 的应用场景

  • 需要有序性:如实现字典、日志按时间排序。
  • 范围查询:如统计某个区间内的键值对。
  • 维护键值顺序:如缓存淘汰策略(LRU 需要有序性)。
// 示例:统计单词出现次数并按字母顺序输出
std::map<std::string, int> word_count;
word_count["apple"]++;
word_count["banana"]++;
word_count["cherry"]++;
for (const auto& [word, count] : word_count) {std::cout << word << ": " << count << std::endl;
}

2. std::unordered_map 的应用场景

  • 高频查找:如数据库索引、缓存映射。
  • 无需有序性:如用户登录状态存储、IP 地址计数。
  • 动态数据规模:如实时数据统计、高频交易系统。
// 示例:统计用户登录次数
std::unordered_map<std::string, int> login_count;
login_count["user1"]++;
login_count["user2"]++;
login_count["user1"]++;
for (const auto& [user, count] : login_count) {std::cout << user << " logged in " << count << " times." << std::endl;
}

🧠 总结

容器优点缺点适用场景
std::map有序性、范围查询高效插入/删除较慢,内存占用高需要有序性、范围查询
std::unordered_map查找/插入/删除高效无序性、哈希冲突影响性能高频查找、无需有序性

文章转载自:

http://Nhn0Ru5W.trtxt.cn
http://mvL2N9Gj.trtxt.cn
http://fHSlIsjf.trtxt.cn
http://cUQw7g4O.trtxt.cn
http://qpzQHk24.trtxt.cn
http://4WNYJoC9.trtxt.cn
http://7Jix87Q2.trtxt.cn
http://6XOnBOBB.trtxt.cn
http://JrpfTTW7.trtxt.cn
http://fmInL2bs.trtxt.cn
http://cyIpmEPn.trtxt.cn
http://NJhwoQlR.trtxt.cn
http://1PTQm7Sb.trtxt.cn
http://kR4tprBL.trtxt.cn
http://NozD4qQQ.trtxt.cn
http://hcK1UUMJ.trtxt.cn
http://B0pr4V94.trtxt.cn
http://54HPSlc3.trtxt.cn
http://WeHyBOjL.trtxt.cn
http://lhzmeeka.trtxt.cn
http://5pNyusdq.trtxt.cn
http://0bLEqGs1.trtxt.cn
http://8VuvZCm2.trtxt.cn
http://UbYGBMyz.trtxt.cn
http://RfEYBrYy.trtxt.cn
http://Bz5h6hOv.trtxt.cn
http://aSRNeQjm.trtxt.cn
http://NiBcSKCt.trtxt.cn
http://qKIg341u.trtxt.cn
http://4BzjhJhP.trtxt.cn
http://www.dtcms.com/wzjs/715539.html

相关文章:

  • 环球旅游网的网站建设网络网站推广选择乐云seo
  • 网站建设js兰州网站设计厂家
  • 网站没被收录怎么办安装wordpress中文
  • 专做程序员招聘的网站itmc平台seo优化关键词个数
  • 怎样做网站别人能访问建设机械网站平台
  • 专业的网站建设国外做化工网站
  • 免费动画制作网站深圳建筑工程信息网
  • 上海网站建设与设计公司好南京响应式网站设计
  • 企业门户网站的作用免费网站制作公司
  • 网站用途及栏目说明怎么做微信小说网站
  • 怎么做签到网站网站服务器及运营维护公告
  • 石家庄那有建网站保健品网站源代码
  • 网站里可以添加视频做背景吗江山市建设局网站
  • vs哪个版本做网站好爱佳倍 北京网站
  • 免费安全建网站百度应用市场
  • 厦门网站设计建设seo网站推广技术
  • 微信小程序电商平台开发德州鲁企动力网站优化中心
  • 搜狗网站上海网站建设网站
  • php 手机网站 上传图片网站设计 侵权
  • 网站开发进度控制计划表宠物托运网站开发
  • 莒县网站制作公司眉山网站建设哪家好
  • 建产品网站怎么做深圳网站建设 宝华大厦
  • 孝感网站制作公司公司网站维护更新流程
  • 网上外贸网站怎么做百度公司的发展历程
  • 免费个人网站建设网站地图案例
  • 天津网站备案时间搜索引擎营销实践报告
  • 网站设计分辨率ps修图软件
  • 上海怎么做网站python软件开发
  • 企业手机网站建设资讯win2003 网站服务器
  • 猎奇网站模板国家企业信用公示系统官网(全国)