• c++ map/multimap容器


    在C++中,std::map 和 std::multimap 是两种关联容器,它们包含了可重复的(对于 multimap)或唯一的(对于 map键值对。这些容器都根据它们的键自动排序,并允许非常快速地根据键查找、插入和删除元素。

    map

    std::map 是一个关联容器,它包含可以重复的键值对(但每个键必须是唯一的),并默认按照升序对键进行排序。

    基本用法:

    1. #include
    2. #include
    3. int main() {
    4. std::map<int, std::string> myMap;
    5. // 插入元素
    6. myMap[1] = "one";
    7. myMap[2] = "two";
    8. myMap[3] = "three";
    9. // 遍历元素
    10. for (const auto& pair : myMap) {
    11. std::cout << pair.first << ": " << pair.second << std::endl;
    12. }
    13. // 查找元素
    14. auto it = myMap.find(2);
    15. if (it != myMap.end()) {
    16. std::cout << "Found " << it->first << ": " << it->second << std::endl;
    17. }
    18. return 0;
    19. }
    multimap

    std::multimap 是一个关联容器,它包含可以重复的键值对,并默认按照升序对键进行排序。

    基本用法:

    1. #include
    2. #include
    3. int main() {
    4. std::multimap<int, std::string> myMultimap;
    5. // 插入元素
    6. myMultimap.insert({1, "one"});
    7. myMultimap.insert({2, "two"});
    8. myMultimap.insert({2, "two again"}); // 注意:键可以重复
    9. myMultimap.insert({3, "three"});
    10. // 遍历元素
    11. for (const auto& pair : myMultimap) {
    12. std::cout << pair.first << ": " << pair.second << std::endl;
    13. }
    14. // 查找元素(注意:对于multimap,find只返回第一个匹配的元素)
    15. auto range = myMultimap.equal_range(2);
    16. for (auto it = range.first; it != range.second; ++it) {
    17. std::cout << "Found " << it->first << ": " << it->second << std::endl;
    18. }
    19. return 0;
    20. }

    在 std::multimap(以及 std::multiset)中,equal_range 是一个特别有用的成员函数,用于查找具有给定键的所有元素的范围。由于 multimap 允许键重复,因此单个键可能对应多个值。equal_range 返回一个 pair,其中 pair.first 是指向第一个不小于(即等于或大于)给定键的元素的迭代器,而 pair.second 是指向第一个大于给定键的元素的迭代器。因此,范围 [pair.first, pair.second) 包含了所有键等于给定键的元素。 

    注意事项
    • 默认情况下,std::map 和 std::multimap 使用 std::less 作为比较对象,这会导致键按照升序排序。你可以通过提供自定义的比较对象来改变排序方式。
    • std::map 和 std::multimap 的迭代器是双向迭代器,它们可以向前或向后遍历容器。
    • 插入、删除和查找操作在 std::map 和 std::multimap 中的平均时间复杂度都是对数级别的(O(log n)),这使得它们在处理大量数据时非常高效。
  • 相关阅读:
    通过一道笔试题目,进行缓存与内存的性能比较及其分析测试
    JavaScript面向对象和原型
    2.1背景位置——精确单位
    双网卡网络设置:有线网卡优先级高于无线网卡
    【第十一章 Set接口概述,HashSet,LinkedHashSet,TreeSet】
    java 转换excel日期格式
    bash中执行比较的几种方法
    C++17静态数据成员声明为inline
    Trie(字典树, 前缀树)
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java手机销售平台系统i949w
  • 原文地址:https://blog.csdn.net/2302_80272644/article/details/139380983