欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C++中unordered_set和unordered_map的区别

C++中unordered_set和unordered_map的区别

2024/10/25 0:30:33 来源:https://blog.csdn.net/coldasice342/article/details/142084621  浏览:    关键词:C++中unordered_set和unordered_map的区别

在C++中,unordered_setunordered_map 都是基于哈希表实现的无序关联容器,它们之间的主要区别在于存储的数据类型和使用的场景。具体区别如下:

1. 键值对 vs. 单一值

  • unordered_set:只存储唯一的键,不存储对应的值。它类似于数学中的集合,每个元素都唯一。例如:

    std::unordered_set<int> mySet;
    mySet.insert(1);
    mySet.insert(2);
    

    在这种情况下,mySet 只存储整数键。

  • unordered_map:存储键-值对,即每个键都有一个与之对应的值。键必须唯一,但值可以重复。例如:

    std::unordered_map<int, std::string> myMap;
    myMap[1] = "one";
    myMap[2] = "two";
    

    在这种情况下,myMap 存储整数键和字符串值的映射。

2. 访问方式

  • unordered_set:只能通过键来访问元素,无法根据值访问。例如,可以检查某个元素是否在集合中,但无法根据值检索,因为它没有值部分。

    if (mySet.find(1) != mySet.end()) {// 元素 1 存在
    }
    
  • unordered_map:可以根据键来访问对应的值。例如:

    std::string value = myMap[1]; // 获取键 1 对应的值 "one"
    

3. 用途

  • unordered_set:适用于只关心元素是否存在的场景,不需要存储任何附加数据。
  • unordered_map:适用于需要通过键来查找值的场景,常用于键值对的映射存储,如字典。

4. 底层实现

  • 相同点:两者底层都是通过哈希表实现,插入、查找、删除的平均时间复杂度都是 (O(1))。
  • 不同点unordered_set 中每个桶只存储键,而 unordered_map 中每个桶存储的是键和值的组合。

总结:

  • unordered_set:适用于不需要值,只关心唯一键的场景。
  • unordered_map:适用于需要存储键值对,通过键快速查找对应值的场景。

希望这些区别对你有帮助!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com