提示信息

C++ STL 中 map 和 set 的实现与应用

惟愿 已关注

C++ STL(标准模板库)中的 mapset 都是基于红黑树(Red-Black Tree)实现的。这种树是一种自平衡的二叉搜索树,以保证在最坏情况下能够提供对数时间复杂度的查找、插入和删除操作。以下是它们的实现细节和应用:

map 实现与应用

实现:

  • 数据结构map 是一种关联容器,存储键值对(key-value pair)。每个键是唯一的,值可以重复。
  • 内部实现:为保证高效的查找和排序,map 底层使用红黑树实现。红黑树是一种确保树高近似对数增长的二叉搜索树,通过旋转和重新着色在插入和删除操作后维持其平衡。
  • 时间复杂度:查找、插入和删除操作都为 O(log n)。

应用:

  • 字典(Dictionary):存储键值对,例如存储单词及其定义。
  • 计数器:统计数据出现的次数,例如:统计一篇文章中各个单词出现的频率。
  • 缓存:实现简单的缓存系统,通过键快速查找到已缓存的数据。

set 实现与应用

实现:

  • 数据结构set 是一种关联容器,存储的是唯一的元素,没有重复。
  • 内部实现set 也使用红黑树来存储数据,确保元素有序且操作效率高。
  • 时间复杂度:查找、插入和删除操作都是 O(log n)。

应用:

  • 元素去重:维护一组唯一的元素,例如:从数据流中排除重复的值。
  • 集合操作:实现数学集合中的交集、并集和差集等操作。
  • 查找:快速查找一个元素是否在集合中。

使用示例

  1. #include <iostream>
  2. #include <map>
  3. #include <set>
  4. // map 使用示例
  5. void mapExample() {
  6. std::map<std::string, int> wordCount;
  7. wordCount["apple"] = 3;
  8. wordCount["banana"] = 2;
  9. wordCount["orange"] = 5;
  10. for (const auto& pair : wordCount) {
  11. std::cout << pair.first << ": " << pair.second << std::endl;
  12. }
  13. }
  14. // set 使用示例
  15. void setExample() {
  16. std::set<int> uniqueNumbers;
  17. uniqueNumbers.insert(10);
  18. uniqueNumbers.insert(20);
  19. uniqueNumbers.insert(10); // 插入一个重复值
  20. for (const auto& number : uniqueNumbers) {
  21. std::cout << number << " ";
  22. }
  23. std::cout << std::endl;
  24. }
  25. int main() {
  26. mapExample();
  27. setExample();
  28. return 0;
  29. }

这个示例代码展示了如何使用 mapset 存储数据并进行简单的操作。map 在这里用于计数,set 则用于存储唯一的数字列表。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
惟愿 关注 已关注

最近一次登录:2024-11-19 20:53:40   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图