首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Example】C++ 标准库常用容器全面概述

capacity 返回在不分配更多的内存的情况下vector可以包含的元素数。(当前内存空间) cbegin 返回指向vector中起始位置的常量迭代器。...std::unordered_set unordered_set 哈希表 Key = Value No 无 std::unordered_multiset unordered_set 哈希表 Key =...每个元素同时用作排序键和值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。...at 查找具有指定键值的元素。...每个元素存储两个对象,包括一个排序键和一个值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。

3.4K30

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.map&&set(无习题)

C++ 中的 set 和 map 容器详细总结 1. 概述 C++ 标准模板库(STL)提供了多种关联容器,用于管理键值对和集合的数据。其中,set 和 map 是最常用的两种关联容器。...2.5 set 的应用场景 元素去重:set 常用于需要存储唯一元素的场景,例如从一个包含重复元素的集合中提取唯一值。...pair.first std::endl; } return 0; } 查找元素:可以使用 find() 函数查找指定键是否存在。...快速查找:map 提供高效的查找机制,适合用于需要根据键快速查找对应值的场景。 排序数据存储:由于 map 中的键是有序的,它适合用于需要对数据按键进行排序的场景。...总结 C++ 中的 set 和 map 容器在数据管理和组织方面非常有用,它们基于红黑树实现,保证了数据的有序性和高效的查找、插入、删除操作。

10110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    穿越数据迷宫:C++哈希表的奇幻旅程

    一、unordered系列关联式容器 在 C++ 标准库中,unordered 系列容器(如 unordered_map 和 unordered_set)是一类基于哈希表实现的关联式容器。...1.1 unordered 容器概述 unordered 容器包含以下几种类型,主要用于不同类型的键值对或集合操作: unordered_set:一个不包含重复元素的集合,存储的是唯一的键。...unordered_multiset:与 unordered_set 相似,但允许包含重复元素。 unordered_map:一个键值对的容器,每个键只能出现一次,键是唯一的。...在 C++ 中,标准库提供了许多内置类型的哈希函数,如 std::hash、std::hashstd::string> 等。此外,用户也可以为自定义类型定义自己的哈希函数。...,如果找到则将该位置的状态标记为 DELETE,并减少元素计数 _n。

    10211

    C++系列笔记(十)

    【导读】《21天学通C++》这本书通过大量精小短悍的程序详细而全面的阐述了C++的基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等...STL集合类   容器 set和 multiset让程序员能够在容器中快速查找键,键是存储在一维容器中的值。set和multiset之间的区别在于,后者可存储重复的值,而前者只能存储唯一的值。...在set和multiset中查找元素 诸如set、multiset、map和multimap等关联容器都提供了成员函数find(),它让您能够根据给定的键来查找值: auto iElementsFound...STL提供的容器类std::unordered_set就是基于散列的set。...要使用STL容器std::unordered_set或std::unordered_multiset,需要包含头文件unordered_set>:#includeunordered_set>相比于std

    50920

    C++常见避坑指南

    这里顺带回顾下C++ std::string常见的字符串查找的方法: std::string::find 用于在字符串中查找指定的子字符串。...可用来检查字符串中是否包含指定的某些字符或者查找字符串中第一个出现的特定字符 std::string::find_first_not_of 用于查找字符串中第一个不与指定字符集合中的任何字符匹配的字符,...可以用来检查字符串中是否包含指定的某些字符,或者查找字符串中最后一个出现的特定字符 std::string::find_last_not_of 用于查找字符串中最后一个不与指定字符集合中的任何字符匹配的字符...除了以上几个方法外,还有查找满足指定条件的元素std::find_if, std::find_if 是 C++ 标准库中的一个算法函数,用于在指定范围内查找第一个满足指定条件的元素,并返回其迭代器。...执行控制块包括对关联资源的引用计数以及弱引用计数等。

    55510

    踏入 C++ 的深邃世界:实现 unordered_set 与 unordered_map 的优雅之旅

    前言 在 C++ 标准库中,unordered_set 和 unordered_map 是常用的哈希容器,分别用于存储唯一元素集合和键值对关联表。...本篇文章将详细讲解如何使用 C++ 模板实现 HashTable 类,并基于该类构建 unordered_set 和 unordered_map,同时深入分析每个成员函数及其实现细节。...unordered_map和unordered_set的主要区别在于它们存储的元素类型:map存储键值对(key-value pairs),而set仅存储唯一的键值(通常是键本身作为值)。...☎️三、Unordered_Set 的实现 unordered_set 是一个无序集合,包含唯一的元素,不支持重复插入。为了实现 unordered_set,我们使用了前面定义的 HashTable。...结语 通过实现 HashTable 以及基于它构建 unordered_set 和 unordered_map,我们不仅深入了解了哈希表的基本操作和冲突解决方法,还学习了如何使用 C++ 模板和仿函数来设计通用数据结构

    11510

    千万不要错过的后端【纯干货】面试知识点整理 I I

    (use_count方法),每个shared_ptr的拷贝都指向同一块内存,在最后一个shared_ptr被析构的时候,内存才会被释放 shared_ptr 是引用计数的方式,使用use_count查看计数...next; next->_pre = cur; } Cur 和 next 存在循环引用,他们的引用计数都变为 2 出了作用域之后,cur 和 next 被销毁,引用计数减 1 因此要释放cur...helgrind helgrind查找多线程程序中的竞争数据。 helgrind查找内存地址,那些被多于一条线程访问的内存地址,但是没有使用一致的锁就会被查出。...std::bin d封装可执行对象 防止头文件重复引用: #ifndef 作用:相同的两个文件不会被重复包含。...优点: 受C/C++语言标准的支持,不受编译器的限制。 不仅仅局限于避免同一个文件被重复包含,也能避免内容完全相同的两个文件(或代码片段)被重复包含。

    80330

    重温C++的设计思想

    std的智能指针(std::unique_ptr,std::shared_ptr),使用智能指针目的之一是减少对象的拷贝:对超出作用域的对象进行释放。...std::move(ptr)是个右值引用。等价于static_cast&&>(ptr)。 2.3 内存对象的局部性 C++的对象缺省为值语义。...3.4 关联容器 c++的关联容器(set,map,multiset,multimap)是有序的,而在别的语言通常是无序的。名字带multi的允许键重复。不带的不允许键重复。...五、标准泛型算法 c++的标准泛型算法: sort:排序 reverse:反转 count:计数 find:查找 max:最大值 min:最小值 minmax:最小值和最大值 next_permutation...六、其他 constexpr和const是编译期常量和运行期常量的意思 lambda表达式:以一对中括号开始,不需要说明返回值(类似auto)

    1.6K247

    C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程

    ::unordered_set、std::unordered_map),全面解析它们的特点、用法、适用场景及常见操作。...无序容器(Unordered Containers) 元素以哈希表存储,查找性能优于关联容器,但数据无序。 包括:std::unordered_set、std::unordered_map。...查找高效:map 的查找、插入和删除操作的时间复杂度为 (O(\log n))。 键唯一:每个键都是唯一的。...常用操作 操作 方法 描述 添加元素 operator[] 或 insert() 添加或更新键值对 删除元素 erase(iterator) 删除指定键的元素 查找元素 find(key) 查找指定键是否存在...set 或 std::map 无序存储和查找 std::unordered_set / std::unordered_map 通过掌握这些容器的特性和用法,你将能够在开发中游刃有余地选择最佳的容器,为程序带来性能和代码可读性的提升

    55410

    重温 CC++ 笔记

    前者是指向常量的指针,后者指向的是变量,但指针是常量 shared_ptr 的行为最接近原始指针,但不能滥用 shared_ptr 有少量的成本,而且有无法克服的循环引用风险,需要搭配 weak_ptr...指针是内存地址,引用是变量别名,指针可以是空,而引用不能为空(引用必须初始化,否则编译失败) 引用是通过指针常量实现的 指针完全映射了计算机硬件,操作效率高,是 C++ 效率高的根源。...可以查看有几个引用,引用为 0 时,才会 delete 内存 make_shared() 还可以定制内存删除函数 缺点: 引用计数的存储和管理都是成本 在运行阶段,引用计数的变动很复杂,很难知道它真正释放资源的时机...一旦 shared_ptr 在某个不确定时间点析构释放资源,就会阻塞整个进程或者线程 可能遇到循环引用导致计数始终不为 0,无法 delete 内存 weak_ptr 专门为打破循环引用设计,只观察引用...g++ -I 包含查找路径? json, messagePack, pb 都敲一下 为什么需要序列化,不能直接 memcpy 吗?

    1.3K30

    C++进阶:详细讲解容器set与map(pair、multiset、multimap)

    1.关联式容器与序列式容器 关联式容器和序列式容器是 C++ 中两种不同的容器类型 关联式容器: 关联式容器主要包括 std::set, std::map, std::multiset, std:...这种结构允许通过键来检索和关联对应的值,key代表键值,value表示与key对应的信息 2.1pair定义 std::pair 是C++标准库中提供的一个简单的键值对实现。...const_iterator find(const key_type& k) const; 在常量 map 中查找键值为 k 的元素,并返回一个指向该元素的迭代器。...5.3.4 [] 读取元素:当使用 [] 运算符时 如果指定的键存在于 map 中,则返回与该键关联的值 如果不存在,则会插入一个新的键值对,键为指定的键,值为默认构造的对应值类型的默认值,并返回该默认值的引用...插入元素:当使用 [] 运算符向 map 中插入元素时 如果指定的键不存在,则会创建一个新的键值对,键为指定的键,值为指定的值,并返回该值的引用 如果键已经存在,则直接返回对应的值的引用。

    40210

    C++ Qt开发:使用关联容器类

    键值对存储: 存储键值对,每个键关联一个值。 性能: 插入和查找操作的平均复杂度是 O(log n),适用于需要按键排序并进行频繁查找的场景。...value(const Key &key) const 返回指定键的值。 contains(const Key &key) const 判断是否包含指定键。...使用场景: 适用于需要键值对有序且键唯一的场景。 QMultiMap 允许重复键: QMultiMap 中可以包含重复的键,即多个键可以映射到相同的值。...唯一键: 每个键在 QHash 中是唯一的,不允许重复键。 性能: 插入和查找操作的平均复杂度是 O(1),适用于需要快速插入和查找的场景。...1.3 QSet QSet 是 Qt 中的无序关联容器,类似于 C++ 标准库的 std::unordered_set。它主要用于存储唯一值,而不关心元素的顺序。

    54510

    C++系列笔记(十一)

    ::pair来指定要插入的键和值:mapIntToString.insert(pait(1000,"One Thousand")); 在map或multimap查找元素 find...调用erase函数时将键作为参数,这将删除包含指定键的所有键-值对: mapObject.erase(key); erase函数的另一种版本接受迭代器作为参数,并删除迭代器指向的元素: mapObject.erase...值对容器std::unordered_map 要使用这个模板类,需要包含头文件#include unordered_map的平均插入和删除时间是固定的,查找元素的时间也是固定的...从使用的角度看,这两种容器与std::map和std::multimap差别不大,可以类似的方式执行实例化、插入和查找。...引用计数智能指针 引用计数是一种记录对象的用户数量的机制。当计数降低到零后,便将对象释放。因此,引用计数提供了一种优良的机制,使得可共享对象而无法对其进行复制。

    1.3K20

    【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

    一、普通引用 1、概念说明 之前的 【C++】C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义...普通引用代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace...: error C3892: “b”: 不能给常量赋值 2、常量引用概念与语法 在 C++ 语言中 , " 常量引用 " , 英文名称为 Const Reference , 是一种引用类型 , 另外一种引用就是...常量引用 b 修改 变量 a 的值 , 则会报错 : error C3892: “b”: 不能给常量赋值 错误代码示例 : // 包含 C++ 头文件 #include "iostream" //...d\n", b); // 修改 常量引用 b 的值 // 报错 : error C3892: “b”: 不能给常量赋值 b = 20; // 控制台暂停 , 按任意键继续向后执行 system

    39511

    字符串池:string字符串在C++和C#中的差异化内存管理方式详解

    C++和C#字符串的基本用法1.1 C++在C++中,字符串可以通过std::string类来表示。...如果存在,就直接返回该字符串的引用;如果不存在,就在字符串池中创建一个新的字符串。在C++中,标准库并没有提供字符串池的功能,但是我们可以通过使用unordered_set来实现一个简单的字符串池。...unordered_set是一个关联容器,它包含唯一对象的集合。每个元素的位置由其值决定,而不是插入的顺序。...下面是一个简单的示例:实现步骤4.1 引入必要的库#include unordered_set>#include 4.2 创建一个unordered_set来存储字符串std::unordered_set...#include unordered_set>#include #include int main() { std::unordered_setstd::string

    9721

    【C++篇】跨越有限与无限的边界:STL之set容器中的自我秩序与无限可能

    这种特性使得 set 非常适用于需要快速去重、自动排序和高效查找的场景。 在本文中,我们将详细探讨 C++ set 容器的特性、构造方法、常用操作及其高级用法。...1.2 set 的特点 有序性:与 unordered_set 不同,set 会根据元素值自动排序,通常使用升序排列。排序操作由内部的红黑树维护。...它适用于需要频繁计数或存储重复数据的场景。...7.1 multiset 与 set 的区别 特性 set multiset 键的唯一性 每个键是唯一的,不允许重复 允许多个相同的键 值的覆盖 插入重复键会被忽略 插入重复键时会保留所有值 查找操作...myMultiSet.erase(3); // 删除所有键为 3 的元素 7.4 使用场景 重复记录:在存储包含重复项的数据时(如多个学生的成绩或产品订单),multiset 能提供灵活的管理方式。

    8410
    领券