• c++ 11标准模板(STL) std::map(六)


    定义于头文件

    template<

        class Key,
        class T,
        class Compare = std::less,
        class Allocator = std::allocator >

    > class map;
    (1)
    namespace pmr {

        template >
        using map = std::map                          std::pmr::polymorphic_allocator>>

    }
    (2)(C++17 起)

     std::map 是有序键值对容器,它的元素的键是唯一的。用比较函数 Compare 排序键。搜索、移除和插入操作拥有对数复杂度。 map 通常实现为红黑树

    在每个标准库使用比较 (Compare) 概念的位置,以等价关系检验唯一性。不精确而言,若二个对象 ab 互相比较不小于对方 : !comp(a, b) && !comp(b, a) ,则认为它们等价(非唯一)。

    std::map 满足容器 (Container) 、具分配器容器 (AllocatorAwareContainer) 、关联容器 (AssociativeContainer) 和可逆容器 (ReversibleContainer) 的要求。

    容量

    检查容器是否为空

    std::map<Key,T,Compare,Allocator>::empty

    bool empty() const;

    (C++11 前)

    bool empty() const noexcept;

    (C++11 起)
    (C++20 前)

    [[nodiscard]] bool empty() const noexcept;

    (C++20 起)

    检查容器是否无元素,即是否 begin() == end() 。

    参数

    (无)

    返回值

    若容器为空则为 true ,否则为 false

    复杂度

    常数。

    返回容纳的元素数

    std::map<Key,T,Compare,Allocator>::size

    size_type size() const;

    (C++11 前)

    size_type size() const noexcept;

    (C++11 起)

     返回容器中的元素数,即 std::distance(begin(), end()) 。

    参数

    (无)

    返回值

    容器中的元素数量。

    复杂度

    常数。

    返回可容纳的最大元素数

    std::map<Key,T,Compare,Allocator>::max_size

    size_type max_size() const;

    (C++11 前)

    size_type max_size() const noexcept;

    (C++11 起)

    返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end()) 。

    参数

    (无)

    返回值

    元素数量的最大值。

    复杂度

    常数。

    注意

    此值通常反映容器大小上的理论极限,至多为 std::numeric_limits::max() 。运行时,可用 RAM 总量可能会限制容器大小到小于 max_size() 的值。

     

    调用示例

    1. #include <iostream>
    2. #include <forward_list>
    3. #include <string>
    4. #include <iterator>
    5. #include <algorithm>
    6. #include <functional>
    7. #include <map>
    8. #include <time.h>
    9. using namespace std;
    10. struct Cell
    11. {
    12. int x;
    13. int y;
    14. Cell() = default;
    15. Cell(int a, int b): x(a), y(b) {}
    16. Cell &operator +=(const Cell &cell)
    17. {
    18. x += cell.x;
    19. y += cell.y;
    20. return *this;
    21. }
    22. Cell &operator +(const Cell &cell)
    23. {
    24. x += cell.x;
    25. y += cell.y;
    26. return *this;
    27. }
    28. Cell &operator *(const Cell &cell)
    29. {
    30. x *= cell.x;
    31. y *= cell.y;
    32. return *this;
    33. }
    34. Cell &operator ++()
    35. {
    36. x += 1;
    37. y += 1;
    38. return *this;
    39. }
    40. bool operator <(const Cell &cell) const
    41. {
    42. if (x == cell.x)
    43. {
    44. return y < cell.y;
    45. }
    46. else
    47. {
    48. return x < cell.x;
    49. }
    50. }
    51. bool operator >(const Cell &cell) const
    52. {
    53. if (x == cell.x)
    54. {
    55. return y > cell.y;
    56. }
    57. else
    58. {
    59. return x > cell.x;
    60. }
    61. }
    62. bool operator ==(const Cell &cell) const
    63. {
    64. return x == cell.x && y == cell.y;
    65. }
    66. };
    67. struct myCompare
    68. {
    69. bool operator()(const int &a, const int &b)
    70. {
    71. return a < b;
    72. }
    73. };
    74. std::ostream &operator<<(std::ostream &os, const Cell &cell)
    75. {
    76. os << "{" << cell.x << "," << cell.y << "}";
    77. return os;
    78. }
    79. std::ostream &operator<<(std::ostream &os, const std::pair<const int, Cell> &pCell)
    80. {
    81. os << pCell.first << "-" << pCell.second;
    82. return os;
    83. }
    84. int main()
    85. {
    86. auto genKey = []()
    87. {
    88. return std::rand() % 10 + 100;
    89. };
    90. auto generate = []()
    91. {
    92. int n = std::rand() % 10 + 100;
    93. Cell cell{n, n};
    94. return cell;
    95. };
    96. std::map<int, Cell> map1;
    97. //检查容器是否无元素,即是否 begin() == end() 。
    98. std::cout << "map1 is empty: " << map1.empty() << std::endl;
    99. for (size_t index = 0; index < 5; index++)
    100. {
    101. map1.insert({genKey(), generate()});
    102. }
    103. std::cout << "map1: ";
    104. std::copy(map1.begin(), map1.end(),
    105. std::ostream_iterator<std::pair<const int, Cell>>(std::cout, " "));
    106. std::cout << std::endl;
    107. //检查容器是否无元素,即是否 begin() == end() 。
    108. std::cout << "map1 is empty: " << map1.empty() << std::endl;
    109. std::cout << std::endl;
    110. std::cout << std::endl;
    111. std::map<int, Cell> map2;
    112. for (size_t index = 0; index < 6; index++)
    113. {
    114. //返回容器中的元素数,即 std::distance(begin(), end()) 。
    115. std::cout << "map2 size : " << map2.size() << ": ";
    116. std::copy(map2.begin(), map2.end(),
    117. std::ostream_iterator<std::pair<const int, Cell>>(std::cout, " "));
    118. std::cout << std::endl;
    119. map2.insert({genKey(), generate()});
    120. }
    121. std::cout << std::endl;
    122. //返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end()) 。
    123. std::map<bool, bool> mapbb;
    124. std::cout << "map max_size: " << mapbb.max_size() << std::endl;
    125. std::map<char, char> mapcc;
    126. std::cout << "map max_size: " << mapcc.max_size() << std::endl;
    127. std::map<short, short> mapss;
    128. std::cout << "map max_size: " << mapss.max_size() << std::endl;
    129. std::map<unsigned short, unsigned short> mapusus;
    130. std::cout << "map max_size: " << mapusus.max_size() << std::endl;
    131. std::map<int, int> mapii;
    132. std::cout << "map max_size: " << mapii.max_size() << std::endl;
    133. std::map<uint8_t, uint8_t> mapui8ui8;
    134. std::cout << "map max_size: " << mapui8ui8.max_size() << std::endl;
    135. std::map<uint16_t, uint16_t> mapui16ui16;
    136. std::cout << "map max_size: " << mapui16ui16.max_size() << std::endl;
    137. std::map<uint32_t, uint32_t> mapui32ui32;
    138. std::cout << "map max_size: " << mapui32ui32.max_size() << std::endl;
    139. std::map<uint64_t, uint64_t> mapui64ui64;
    140. std::cout << "map max_size: " << mapui64ui64.max_size() << std::endl;
    141. std::map<double, double> mapdd;
    142. std::cout << "map max_size: " << mapdd.max_size() << std::endl;
    143. std::map<float, float> mapff;
    144. std::cout << "map max_size: " << mapff.max_size() << std::endl;
    145. std::map<long, long> mapll;
    146. std::cout << "map max_size: " << mapll.max_size() << std::endl;
    147. std::map<long long, long long> mapllll;
    148. std::cout << "map max_size: " << mapllll.max_size() << std::endl;
    149. std::map<string, string> mapstrstr;
    150. std::cout << "map max_size: " << mapstrstr.max_size() << std::endl;
    151. std::map<Cell, Cell> mapcell;
    152. std::cout << "map max_size: " << mapcell.max_size() << std::endl;
    153. return 0;
    154. }

    输出

     

  • 相关阅读:
    NOIP 2012 普及组初赛 第28题 排列数
    Centos配置链路聚合bond的步骤
    git管理项目的基本使用方法
    14、三维表面重建-DeepSDF
    太牛了,阿里这份Spring Cloud开发手册几乎涵盖了微服务的所有操作
    腾讯内部疯传MyBatis实践指南,让味同嚼蜡的知识生动有趣
    【干货】90条简单实用的Python编程技巧总结
    LeetCode高频题38. 外观数列
    【Hive SQL 每日一题】统计各个商品今年销售额与去年销售额的增长率及排名变化
    k8s快速查看pod对应的容器
  • 原文地址:https://blog.csdn.net/qq_40788199/article/details/130906982