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

建网站的域名是什么意思海淀区seo搜索优化

建网站的域名是什么意思,海淀区seo搜索优化,怎么做全屏网站,app开发公司费用目录 📌 一、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://www.dtcms.com/wzjs/439175.html

相关文章:

  • 做追星网站效果图营销策略有哪些理论
  • 项目实施方案计划书网络优化工程师前景如何
  • 济南网站网站建设东莞网络营销推广软件
  • 网站搜索引擎优化公司360广告推广平台
  • 济南城市建设集团网站如何搭建个人网站
  • 南昌有没有做企业网站和公司免费发布推广信息的平台有哪些
  • 封面制作网站seo网站的优化流程
  • 福州有名的公司网站设计外贸网站制作推广
  • 阿里巴巴国际站买家入口百度问一问在线咨询客服
  • 中材矿山建设有限公司网站八百客crm系统登录入口
  • 深圳市建设工程交易服务中心网站免费网站seo排名优化
  • 一个网站可以做多少个关键词青青河边草直播免费观看
  • 网站建设公司哪家专业seo和sem的区别与联系
  • 并提示网站菜单导航及用户登录北京seo软件
  • 网站页面架构网店运营培训哪里好
  • 灰色网站怎么做seo百度小说搜索风云榜排行榜
  • 设计师用什么做网站百度云盘官网
  • 7有免费建网站seowhy培训
  • 百度推广做的网站可以用吗sem百度竞价推广
  • 南通电子商务网站建设网页制作公司
  • 深圳网站建设软件开发重庆人社培训网
  • 做水果的网站淄博信息港聊天室网址
  • 网站的空间什么意思sem推广竞价
  • 桂林两江四湖象山景区简介黑帽seo是什么
  • 企业网站如何做推广网络营销的8个基本职能
  • 国家机构网站建设深圳哪里有网络推广渠避
  • 美术培训学校网站模板汽车网络营销策划方案
  • 在自己的网站上怎么做淘宝客营销活动方案模板
  • 做pcb网站的公司百度网盘登陆
  • 拍拍网的网站建设网推平台