日照哪里有做网站的/广告公司推广文案

日照哪里有做网站的,广告公司推广文案,生活中花钱请人做网站,工厂网站建设目录 关联式容器 键值对 set set的概念 set的构造函数 set的使用 map map的概念 map的构造函数 map的使用 multiset multimap 关联式容器 C标准库提供了多种容器,用于高效管理和操作数据集合。这些容器可分为以下几类: 顺序容器(…

目录

关联式容器

键值对

set

set的概念

set的构造函数

set的使用

map

map的概念

map的构造函数

map的使用

multiset

multimap


关联式容器

C++标准库提供了多种容器,用于高效管理和操作数据集合。这些容器可分为以下几类:

  1. 顺序容器(Sequence Containers)

  2. 关联容器(Associative Containers)

  3. 容器适配器(Container Adapters)

  4. 其他类容器类型

 顺序容器:核心是元素的线性存储,支持随机或顺序访问

容器分类容器类C++标准描述
顺序容器vectorC++98动态数组,支持快速随机访问,尾部操作高效。
listC++98双向链表,任意位置插入/删除高效,不支持随机访问。
dequeC++98双端队列,头尾插入/删除高效,支持随机访问。
arrayC++11固定大小数组,安全性优于内置数组,编译时确定大小。
forward_listC++11单向链表,节省内存,仅支持单向遍历。

 关联容器:基于键(Key)组织数据,有序容器(红黑树)与无序容器(哈希表)区分明显。

有序关联容器setC++98唯一键集合,基于红黑树,自动排序。
mapC++98键值对集合(键唯一),基于红黑树,按键排序。
multisetC++98允许重复键的集合,基于红黑树。
multimapC++98允许重复键的键值对集合,基于红黑树。
无序关联容器unordered_setC++11唯一键哈希集合,基于哈希表,元素无序。
unordered_mapC++11键值对哈希表(键唯一),基于哈希表。
unordered_multisetC++11允许重复键的哈希集合。
unordered_multimapC++11允许重复键的键值对哈希表。

容器适配器:通过限制接口实现特定数据结构(如栈、队列、堆),底层依赖其他容器。

适配器stackC++98后进先出(LIFO)结构,默认基于std::deque实现。
queueC++98先进先出(FIFO)结构,默认基于std::deque实现。
priority_queueC++98优先级队列(最大堆),默认基于std::vector实现。

 其他类容器类型:如std::stringstd::bitset,虽不是严格意义上的通用容器,但提供类似容器的操作。

其他类容器类型stringC++98字符串类,支持类似vector的操作。
bitsetC++98固定大小的位集合,用于位操作。
valarrayC++98数值计算专用数组,支持向量化操作。
spanC++20非拥有视图,提供对连续内存的轻量访问(如数组、vector等)。

键值对

键值对(Key-Value Pair) 是一种核心数据结构,用于将唯一的键(Key) 与对应的值(Value) 关联,常用于快速查找、映射或配置管理。

  • 键(Key):唯一标识符,用于快速定位值(不可重复,除非使用 multimap)。

  • 值(Value):与键关联的数据,可以是任意类型(基本类型、对象、容器等)。

键值对类型 std::pair

  • 定义std::pair<KeyType, ValueType> 是标准库中表示键值对的模板类。

  • 访问成员:通过 first(键)和 second(值)访问。

pair<string, int> p("hello", 1);
cout << p.first << p.second << endl;
// hello1

set

set的概念

set 是一个有序关联容器,存储唯一键(Key),键本身即为其值(没有额外的Value)。
元素按键的严格弱序规则(默认升序)自动排序,不允许重复键。

特性说明
唯一性所有元素唯一,插入重复值会被忽略(通过返回值可判断是否插入成功)。
自动排序元素按键值自动排序(默认升序,可自定义排序规则)。
不可修改键元素(键)在容器中不可直接修改,需先删除旧值再插入新值。
高效查找支持 O(log n) 复杂度的查找(find()count() 等操作)。
稳定迭代器插入或删除操作不会使其他元素的迭代器失效(除非指向被删除元素)。
  • set在底层是用平衡搜索树(红黑树)实现的,所以在set当中查找某个元素的时间复杂度为 logN
  • set中的元素不能被修改,因为set在底层是用平衡搜索树(红黑树)来实现的,若是对平衡搜索树(红黑树)当中某个结点的值进行了修改,那么这棵树将不再是平衡搜索树(红黑树)

set的构造函数

1、默认构造函数:创建一个空的集合,可以指定自定义的比较器(Comparator)和分配器(Allocator)。

explicit set(const Compare& comp = Compare(), const Allocator& alloc = Allocator());set<int> s1; // 默认升序排序的空集合// 自定义降序排序的比较器
struct CompareDesc 
{bool operator()(int a, int b) const { return a > b; }
};
set<int, CompareDesc> s2; // 降序排列的空集合

2、范围构造函数:通过迭代器范围 [first, last) 初始化集合,元素会被自动去重并排序。

template <class InputIterator>
set(InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& alloc = Allocator());vector<int> vec = {5, 2, 2, 3, 5};
// 从 vector 的迭代器范围构造,自动去重并升序排序
std::set<int> s(vec.begin(), vec.end()); // s = {2, 3, 5}

 3、拷贝构造函数:创建一个新集合,复制另一个集合的所有元素。

set(const set& other);set<int> s_original = {1, 2, 3};
set<int> s_copy(s_original); // 深拷贝,s_copy = {1, 2, 3}

4、初始化列表构造函数(C++11 起):通过初始化列表(Initializer List)直接初始化集合。

set(std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator());set<int> s = {3, 1, 2, 2}; // 自动去重并排序为 {1, 2, 3}

set的使用

成员函数功能
insert插入指定元素
erase删除指定元素
find查找指定元素
size获取容器中元素的个数
empty判断容器是否为空
clear清空容器
swap交换两个容器中的数据
count获取容器中指定元素值的元素个数

 示例:

#include <iostream>
#include <set>
#include <vector>
#include <algorithm> // 集合运算所需头文件
using namespace std;// 自定义比较器(按字符串长度排序)
struct LengthCompare 
{bool operator()(const string& a, const string& b) const {return a.size() < b.size();}
};int main() 
{// ------------------------ 1. 初始化与插入 ------------------------set<int> s1 = {3, 1, 2, 2}; // 去重排序: {1, 2, 3}s1.insert(5);                // 插入5s1.emplace(4);               // 原地构造插入4// ------------------------ 2. 删除与清空 ------------------------s1.erase(3);                 // 删除元素3auto it = s1.find(1);if (it != s1.end()) s1.erase(it); // 通过迭代器删除// s1.clear();               // 清空集合// ------------------------ 3. 遍历与查找 ------------------------cout << "s1: ";for (int val : s1) {          // C++11 范围for遍历cout << val << " ";       // 输出: 2 4 5}cout << endl;// 查找示例if (s1.count(4)) {cout << "4 exists in s1" << endl;}// ------------------------ 4. 自定义排序 ------------------------set<string, LengthCompare> s3 = {"apple", "banana", "cat"};// 按长度排序: "cat", "apple", "banana"cout << "s3: ";for (const auto& str : s3) {cout << str << " ";}cout << endl;return 0;
}

map

map的概念

  • 定义
    map 是一个有序关联容器,存储键值对(Key-Value Pair),其中键(Key)唯一,元素按键的严格弱序规则(默认升序)自动排序。
    每个元素是一个 std::pair<const Key, Value>,键不可修改,值可以修改。

  • 底层实现
    基于红黑树(Red-Black Tree,自平衡二叉搜索树),保证插入、删除和查找的时间复杂度为 O(log n)

特性说明
键唯一性所有键唯一,插入重复键会被忽略(可通过返回值判断是否成功)。
自动排序元素按键自动排序(默认升序,可自定义排序规则)。
不可修改键键在容器中不可直接修改,需先删除旧键值对再插入新键。
高效查找支持 O(log n) 复杂度的查找(find()count() 等操作)。
稳定迭代器插入或删除操作不会使其他元素的迭代器失效(除非指向被删除元素)。

map的构造函数

1、默认构造函数:创建一个空的 map,可指定自定义的比较器(Comparator)和分配器(Allocator)。

explicit map(const Compare& comp = Compare(), const Allocator& alloc = Allocator());map<int, string> m1; // 空map,默认按键升序排序// 自定义按字符串长度排序的比较器
struct KeyCompare {bool operator()(const string& a, const string& b) const {return a.size() < b.size();}
};
map<string, int, KeyCompare> m2; // 键按长度排序的空map

2、范围构造函数:通过迭代器范围 [first, last) 初始化 map,键值对会被自动去重并排序。

template <class InputIterator>
map(InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& alloc = Allocator());vector<pair<int, string>> vec = {{3, "Alice"}, {1, "Bob"}, {3, "Charlie"}};// 从vector的迭代器构造,自动去重并按键升序排序
map<int, string> m3(vec.begin(), vec.end()); // {1: "Bob", 3: "Alice"}

3、拷贝构造函数:深拷贝另一个 map 的所有键值对。

map(const map& other);map<int, string> m_original = {{1, "A"}, {2, "B"}};
map<int, string> m_copy(m_original); // 深拷贝,m_copy = {1: "A", 2: "B"}

4、初始化列表构造函数(C++11 起):通过初始化列表直接初始化 map

map(initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator());map<int, string> m5 = {{3, "Alice"}, {1, "Bob"}, {3, "Charlie"}}; // 去重后 {1: "Bob", 3: "Alice"}// 自定义降序排序
map<int, string, greater<int>> m6 = {{3, "A"}, {1, "B"}}; // {3: "A", 1: "B"}

注意事项

  1. 键的唯一性:插入重复键时,insert 会失败,operator[] 会覆盖原有值。

  2. 自定义比较器:需满足严格弱序规则(例如不能定义 <= 作为比较逻辑)。

  3. 性能权衡:若无需有序性,优先使用 unordered_map(哈希表实现,平均 O(1) 操作)。

map的使用

接口分类接口名称作用
插入操作insert插入键值对,返回插入结果(迭代器 + 是否成功)。
emplace原地构造键值对,避免临时对象拷贝。
operator[]通过键访问值(若键不存在,插入默认值并返回引用)。
删除操作erase删除指定键或迭代器范围内的键值对。
clear清空所有键值对。
查找与访问find查找键,返回迭代器(未找到返回 end())。
count返回键的数量(0 或 1)。
contains (C++20)检查键是否存在,返回布尔值。
at安全访问值(键不存在时抛出异常)。
容量查询empty检查容器是否为空。
size返回键值对数量。
迭代器begin / end获取正向迭代器(按键升序)。
rbegin / rend获取反向迭代器(按键降序)。

 示例:

#include <iostream>
#include <map>
#include <string>
using namespace std;int main() 
{map<int, string> m;// 插入操作m.insert({1, "Alice"});m.emplace(2, "Bob");      // 原地构造m[3] = "Charlie";         // operator[] 插入// 删除操作m.erase(1);               // 删除键1// m.clear();             // 清空所有元素// 查找与访问auto it = m.find(3);if (it != m.end()) {cout << "键3的值: " << it->second << endl;}// operator[] 的副作用(自动插入默认值)cout << "m[4]: " << m[4] << endl; // 输出空字符串(自动插入{4, ""})// 遍历(C++17 结构化绑定)cout << "所有键值对:" << endl;for (const auto& [key, value] : m) {cout << key << ": " << value << endl;}// 容量查询cout << "元素数量: " << m.size() << endl;cout << "是否为空: " << (m.empty() ? "是" : "否") << endl;return 0;
}

multiset

multiset容器与set容器的底层实现一样,都是平衡搜索树(红黑树),multiset容器和set容器的唯一区别就是,multiset允许键值冗余,即multiset容器当中存储的元素是可以重复的。

特性std::setstd::multiset
键的唯一性键唯一,不允许重复允许重复键
插入操作插入重复键时失败(返回 pair<iterator, bool>总是插入成功(返回 iterator
查找与计数count(key) 返回 0 或 1count(key) 可返回 >=0 的任意值
底层实现红黑树(自平衡二叉搜索树)红黑树(自平衡二叉搜索树)
时间复杂度插入、删除、查找均为 O(log n)同 set
典型应用场景需要唯一键的有序集合(如用户ID集合)允许重复的有序集合(如统计成绩分布)
  • 选择 set:需要保证键唯一性且需要有序遍历的场景(如字典、配置表)。

  • 选择 multiset:允许重复键且需要统计频率或保留重复数据的场景(如日志时间戳记录、投票统计)。

 

multimap

multimap容器与map容器的底层实现一样,也都是平衡搜索树(红黑树),multimap容器和map容器的区别,multimap允许键值冗余,即multimap容器当中存储的元素是可以重复的

特性std::mapstd::multimap
键的唯一性键唯一,不允许重复允许重复键
插入操作插入重复键时覆盖原有值(operator[])或失败(insert总是插入成功,允许多个相同键的键值对共存
查找与访问operator[] 直接通过键访问值(键不存在时插入)没有 operator[],必须通过迭代器访问
查找结果find(key) 返回单个迭代器find(key) 返回第一个匹配键的迭代器
键值对数量每个键对应唯一值一个键可对应多个值
典型应用场景字典、配置表(键唯一)一对多映射(如学生ID对应多门课程成绩)
  • 选择 map:需要键唯一且直接通过键访问值(如用户ID到用户名的映射)。

  • 选择 multimap:允许键重复且需处理一对多关系(如订单ID对应多个商品)。

  • 关键区别

    • map 的键唯一,支持 operator[]

    • multimap 允许键重复,需用迭代器或 equal_range 处理多个值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek:构筑大数据平台底座的最优解

一、大数据平台底座的重要性 在数字化浪潮席卷全球的当下,数据已成为企业乃至整个社会最具价值的资产之一 。大数据平台底座作为数据处理和业务支撑的核心枢纽,其重要性不言而喻,犹如大厦的基石,关乎整个数据生态系统的稳定与发展。 从数据处理角度来看,随着互联网、物联…

ubuntu20 安装python2

1. 确保启用了 Universe 仓库 在某些情况下&#xff0c;python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表&#xff1a; bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装&#xff1a; bash复制…

STM32---FreeRTOS中断管理试验

一、实验 实验目的&#xff1a;学会使用FreeRTOS的中断管理 创建两个定时器&#xff0c;一个优先级为4&#xff0c;另一个优先级为6&#xff1b;注意&#xff1a;系统所管理的优先级范围 &#xff1a;5~15 现象&#xff1a;两个定时器每1s&#xff0c;打印一段字符串&#x…

docker利用docker-compose-gpu.yml启动RAGFLOW,文档解析出错【亲测已解决】

0.问题说明 想要让RAGFLOW利用GPU资源跑起来&#xff0c;可以选择docker-compose-gpu.yml启动。&#xff08;但是官网启动案例是86平台的不是NVIDIA GPU的&#xff0c;docker-compose-gpu.yml又是第三方维护&#xff0c;所以稍有问题&#xff09; 1.问题 docker利用docker-c…

【AI深度学习网络】卷积神经网络(CNN)入门指南:从生物启发的原理到现代架构演进

深度神经网络系列文章 【AI深度学习网络】卷积神经网络&#xff08;CNN&#xff09;入门指南&#xff1a;从生物启发的原理到现代架构演进【AI实践】基于TensorFlow/Keras的CNN&#xff08;卷积神经网络&#xff09;简单实现&#xff1a;手写数字识别的工程实践 引言 在当今…

【ThreeJS Basics 06】Camera

文章目录 Camera 相机PerspectiveCamera 透视相机正交相机用鼠标控制相机大幅度转动&#xff08;可以看到后面&#xff09; 控制组件FlyControls 飞行组件控制FirstPersonControls 第一人称控制PointerLockControls 指针锁定控制OrbitControls 轨道控制TrackballControls 轨迹球…

Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用

注&#xff1a;本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文&#xff0c;机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…

【二.提示词工程与实战应用篇】【3.Prompt调优:让AI更懂你的需求】

最近老张在朋友圈秀出用AI生成的国风水墨画,隔壁王姐用AI写了份惊艳全场的年终总结,就连楼下小卖部老板都在用AI生成营销文案。你看着自己跟AI对话时满屏的"我不太明白您的意思",是不是怀疑自己买了台假电脑?别慌,这可能是你的打开方式不对。今天咱们就聊聊这个…

蓝桥杯C组真题——巧克力

题目如下 思路 代码及解析如下 谢谢观看

使用 Deepseek + kimi 快速生成PPT

前言 最近看到好多文章和视频都在说&#xff0c;使用 Deepseek 和 kimi 能快速生成精美的 ppt&#xff0c;毕竟那都是别人说的&#xff0c;只有自己尝试一次才知道结果。 具体操作 第一步&#xff1a;访问 deepseek 我们访问 deepseek &#xff0c;把我们想要输入的内容告诉…

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域&#xff0c;LLM&#xff08;Large Memory Language Model&#xff0c;大型记忆语言模型&#xff09;架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…

【Python爬虫】利用代理IP爬取跨境电商AI选品分析

引言 随着DeepSeek的流行&#xff0c;越来越多的用户开始尝试将AI工具融入到日常工作当中&#xff0c;借助AI的强大功能提高工作效率。最近又掀起了一波企业出海的小高潮&#xff0c;那么如果是做跨境电商业务&#xff0c;怎么将AI融入工作流中呢&#xff1f;在做跨境电商的时候…

C语言——链表

大神文献&#xff1a;https://blog.csdn.net/weixin_73588765/article/details/128356985 目录 一、链表概念 1. 什么是链表&#xff1f; 1.1 链表的构成 2. 链表和数组的区别 数组的特点&#xff1a; 链表的特点&#xff1a; 二者对比&#xff1a; 二…

Spring框架自带的定时任务:Spring Task详解

文章目录 一、基本使用1、配置&#xff1a;EnableScheduling2、触发器&#xff1a;Scheduled 二、拓展1、修改默认的线程池2、springboot配置 三、源码分析参考资料 一、基本使用 1、配置&#xff1a;EnableScheduling import org.springframework.context.annotation.Config…

数据库事务、乐观锁及悲观锁

参考&#xff1a;node支付宝支付及同步、异步通知、主动查询支付宝订单状态 以下容结合上述链接查看 1. 什么是数据库事务&#xff1f; 1.1. 连续执行数据库操作 在支付成功后&#xff0c;我们在自定义的paidSuccess里&#xff0c;依次更新了订单状态和用户信息。也就说这里…

SCI期刊推荐 | 免版面费 | 计算机领域:信息系统、软件工程、自动化和控制

在学术研究领域&#xff0c;选择合适的SCI期刊对科研成果的传播与认可至关重要。了解SCI期刊的研究领域和方向是基础&#xff0c;确保投稿内容与期刊主题相符。同时&#xff0c;要关注期刊的影响因子和评估标准&#xff0c;选择具有较高影响力和学术认可度的期刊。阅读期刊的投…

常见webshell工具的流量特征

1、蚁剑 1.1、蚁剑webshell静态特征 蚁剑中php使用assert、eval执行&#xff1b;asp只有eval执行&#xff1b;在jsp使用的是Java类加载&#xff08;ClassLoader&#xff09;&#xff0c;同时会带有base64编码解码等字符特征。 1.2、蚁剑webshell动态特征 查看流量分析会发现…

爬虫系列之【数据解析之bs4】《四》

目录 前言 一、用法详解 1.1 获取标签内容 1.2 获取标签属性 1.3 获取标签包裹的文本内容 1.4 获取标签列表 1.5 css 选择器&#xff1a;select 二、实战案例 完整代码 前言 HTML数据解析 1、正则 2、xpath&#xff08;居多&#xff09; 3、css 选择器&#xff08;bs…

Java-实现PDF合同模板填写内容并导出PDF文件

可用于公司用户合同导出pdf文件 效果图 一、导入所需要jar包 <!--生成PDF--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency&…

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年&#xff0c;人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角&#xff0c;AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型&#xff0c;从技术背景、应用领域、性能、成本效益等多个方…