STL之关联容器

STL:STL关联容器 set 文章目录STL关联容器 set1. 操作1.1 使用迭代器遍历1.2 插入1.3 查找2. 相关练习2.1 力扣217:存在重复元素2.2 力扣448:找到所有数组中消失的数字2.3 力扣287:寻找重复数2.4 力扣349:两个数组的交集 STL关联容器 set 集合容器(set):快速查找,不允许重复值 set 的特点:有序且不重复 1. 操作 1.1 使用迭代器遍历 #include <iostream> #include <set> using namespace std; 阅读详情


一、关联容器概述

关联容器支持高效的关键字查找和访问。两个主要的关联容器类型是 map 和 set。map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set 中每个元素只包含一个关键字。

标准库提供8个关联容器,这8个关联容器间的不同体现在三个维度上:每个容器(1)或者是一个 set,或者是一个 map;(2)或者要求不重复的关键字,或者允许重复的关键字;(3)按顺序保存元素,或无序保存。允许重复关键字的容器的名字中都包含单词 multi;不保持关键字按顺序存储的容器的名字都以单词 unordered 开头。

在这里插入图片描述

有序关联容器基于一个序标准(默认是小于比较操作<)进行查找。这类容器用平衡二叉树实现,通常是红黑树(有关红黑树的内容请参看 STL之红黑树)。

无序关联容器基于一个哈希函数进行查找。这类容器用哈希表实现,采用溢出链表策略(有关哈希表的内容请参看STL之哈希表)。

二、关联容器

2.1、set

set 的特性是,所有元素都会根据元素的键值自动被排序。由于 set 元素值就是其键值,关系到 set 元素的排列规则,因此不可以通过 set 的迭代器改变 set 的值。

标准库的 set 以 RB-tree 为底层机制,set 操作通过调用 RB-tree 的接口实现:

template <typename _Key, typename _Compare = std::less<_Key>,
          typename _Alloc = std::allocator<_Key>>
class set
{
  typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<_Key>::other _Key_alloc_type;

  typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
                   key_compare, _Key_alloc_type> _Rep_type;
  _Rep_type _M_t; // Red-black tree representing set.

  std::pair<iterator, bool>
  insert(value_type &&__x)
  {
    std::pair<typename _Rep_type::iterator, bool> __p =
        _M_t._M_insert_unique(std::move(__x));
    return std::pair<iterator, bool>(__p.first, __p.second);
  }
  ...
};

2.2、multiset

multiset 的特性以及用法和 set 完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制 RB-tree 的 _M_insert_equal() 而非 _M_insert_unique()。

template <typename _Key, typename _Compare = std::less<_Key>,
          typename _Alloc = std::allocator<_Key>>
class multiset
{
  /// This turns a red-black tree into a [multi]set.
  typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<_Key>::other _Key_alloc_type;

  typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
                   key_compare, _Key_alloc_type> _Rep_type;
  /// The actual tree structure.
  _Rep_type _M_t;

  iterator
  insert(value_type &&__x)
  {
    return _M_t._M_insert_equal(std::move(__x));
  }
  ...
};

2.3、map

map 的特性是,所有元素都会根据元素的键值自动被排序。map 的所有元素都是 pair,同时拥有实值和键值。

标准库的 map 以 RB-tree 为底层机制,map 操作通过调用 RB-tree 的接口实现:

template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
          typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
class map
{
  /// This turns a red-black tree into a [multi]map.
  typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<value_type>::other _Pair_alloc_type;

  typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
                   key_compare, _Pair_alloc_type> _Rep_type;

  /// The actual tree structure.
  _Rep_type _M_t;

  std::pair<iterator, bool>
  insert(value_type &&__x)
  {
    return _M_t._M_insert_unique(std::move(__x));
  }
  ...
};

2.4、multimap

multimap的特性以及用法和 map 完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制 RB-tree 的 _M_insert_equal() 而非 _M_insert_unique()。

template <typename _Key, typename _Tp,
          typename _Compare = std::less<_Key>,
          typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>>
class multimap
{
  /// This turns a red-black tree into a [multi]map.
  typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template rebind<value_type>::other _Pair_alloc_type;

  typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
                   key_compare, _Pair_alloc_type> _Rep_type;
  /// The actual tree structure.
  _Rep_type _M_t;

  iterator
  insert(value_type &&__x)
  {
    return _M_t._M_insert_equal(std::move(__x));
  }
  ...
};

2.5、unordered_set

unordered_set以哈希表为底层机制,unordered_set操作通过调用哈希表的接口实现:

/// Base types for unordered_set.
template <bool _Cache>
using __uset_traits = __detail::_Hashtable_traits<_Cache, true, true>;

template <typename _Value,
          typename _Hash = hash<_Value>,
          typename _Pred = std::equal_to<_Value>,
          typename _Alloc = std::allocator<_Value>,
          typename _Tr = __uset_traits<__cache_default<_Value, _Hash>::value>>
using __uset_hashtable = _Hashtable<_Value, _Value, _Alloc,
                                    __detail::_Identity, _Pred, _Hash,
                                    __detail::_Mod_range_hashing,
                                    __detail::_Default_ranged_hash,
                                    __detail::_Prime_rehash_policy, _Tr>;

template <typename _Value,
          typename _Hash = hash<_Value>,
          typename _Pred = equal_to<_Value>,
          typename _Alloc = allocator<_Value>>
class unordered_set
{
  typedef __uset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable;
  _Hashtable _M_h;

  std::pair<iterator, bool>
  insert(value_type &&__x)
  {
    return _M_h.insert(std::move(__x));
  }
  ...
};

2.6、unordered_multiset

unordered_multiset的特性以及用法和 unordered_set完全相同,唯一的差别在于它允许键值重复。

/// Base types for unordered_multiset.
template <bool _Cache>
using __umset_traits = __detail::_Hashtable_traits<_Cache, true, false>;

template <typename _Value,
          typename _Hash = hash<_Value>,
          typename _Pred = std::equal_to<_Value>,
          typename _Alloc = std::allocator<_Value>,
          typename _Tr = __umset_traits<__cache_default<_Value, _Hash>::value>>
using __umset_hashtable = _Hashtable<_Value, _Value, _Alloc,
                                     __detail::_Identity,
                                     _Pred, _Hash,
                                     __detail::_Mod_range_hashing,
                                     __detail::_Default_ranged_hash,
                                     __detail::_Prime_rehash_policy, _Tr>;

template <typename _Value,
          typename _Hash = hash<_Value>,
          typename _Pred = equal_to<_Value>,
          typename _Alloc = allocator<_Value>>
class unordered_multiset
{
  typedef __umset_hashtable<_Value, _Hash, _Pred, _Alloc> _Hashtable;
  _Hashtable _M_h;

  iterator
  insert(value_type &&__x)
  {
    return _M_h.insert(std::move(__x));
  }
  ...
};

2.7、unordered_map

unordered_map以哈希表为底层机制,unordered_map操作通过调用哈希表的接口实现:

/// Base types for unordered_map.
template <bool _Cache>
using __umap_traits = __detail::_Hashtable_traits<_Cache, false, true>;

template <typename _Key,
          typename _Tp,
          typename _Hash = hash<_Key>,
          typename _Pred = std::equal_to<_Key>,
          typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>,
          typename _Tr = __umap_traits<__cache_default<_Key, _Hash>::value>>
using __umap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
                                    _Alloc, __detail::_Select1st,
                                    _Pred, _Hash,
                                    __detail::_Mod_range_hashing,
                                    __detail::_Default_ranged_hash,
                                    __detail::_Prime_rehash_policy, _Tr>;

template <typename _Key, typename _Tp,
          typename _Hash = hash<_Key>,
          typename _Pred = equal_to<_Key>,
          typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
class unordered_map
{
  typedef __umap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
  _Hashtable _M_h;

  template <typename _Pair>
  __enable_if_t<is_constructible<value_type, _Pair &&>::value,
                pair<iterator, bool>>
  insert(_Pair &&__x)
  {
    return _M_h.emplace(std::forward<_Pair>(__x));
  }
  ...
};

2.8、unordered_multimap

unordered_multimap的特性以及用法和 unordered_map完全相同,唯一的差别在于它允许键值重复。

/// Base types for unordered_multimap.
template <bool _Cache>
using __ummap_traits = __detail::_Hashtable_traits<_Cache, false, false>;

template <typename _Key,
          typename _Tp,
          typename _Hash = hash<_Key>,
          typename _Pred = std::equal_to<_Key>,
          typename _Alloc = std::allocator<std::pair<const _Key, _Tp>>,
          typename _Tr = __ummap_traits<__cache_default<_Key, _Hash>::value>>
using __ummap_hashtable = _Hashtable<_Key, std::pair<const _Key, _Tp>,
                                     _Alloc, __detail::_Select1st,
                                     _Pred, _Hash,
                                     __detail::_Mod_range_hashing,
                                     __detail::_Default_ranged_hash,
                                     __detail::_Prime_rehash_policy, _Tr>;

template <typename _Key, typename _Tp,
          typename _Hash = hash<_Key>,
          typename _Pred = equal_to<_Key>,
          typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
class unordered_multimap
{
  typedef __ummap_hashtable<_Key, _Tp, _Hash, _Pred, _Alloc> _Hashtable;
  _Hashtable _M_h;

  template <typename _Pair>
  __enable_if_t<is_constructible<value_type, _Pair &&>::value, iterator>
  insert(_Pair &&__x)
  {
    return _M_h.emplace(std::forward<_Pair>(__x));
  }
  ...
};
C++轮子(3) · STL关联容器 我们知道 Concept 表示的不是一个类型而是一个类型集合,所以 Refinement 表示的其实也是一个类型集合,这些类型比 Concept 中的定义的类型要有更多的约束和特性(约束和特性其实是一个问题的两个方面,你约束的越是严格,你能够使用的特性越多,但是你能使用的场景越少,比如 Java 中 Object 类哪儿都能用,又哪儿都用不了)。如果你在你的程序中需要查找最吻合的某个值(比如上面例子中的找到给定分辨率最合适的比特率),你可以使用上面提到的这几个函数,它们可以在logn之内找到给定的位置。 阅读详情

相关推荐

STL:关联容器 map

STL关联容器 set 映射容器(map):一对多映射,基于关键字快速查找,不允许重复值 map 的特点:每次放入两个数据 <key,value>,key 有序且不重复 1. 操作 1.1 初始化和查找 初始化map词典并访问 #include <iostream> #include <map> using namespace std; int main(){ // 映射dict目录/词典 map<string,string>

凯凯在此 609

STL之set、multiset学习总结(C++)

STL之set、multiset用法概述具体用法(以set为例)0. 头文件1. 声明和初始化2. 常用函数(查询)2.1 empty()2.2 size()2.3 find()2.4 lower_bound()2.5 upper_bount()2.6 equal_range()2.7 count()2.8 迭代器2.9 输出3. 常用函数(操作)3.1 insert()3.2 swap()3.9...

ZeroGor的博客 1682

学习STL的历程——关联容器

STL模板库包括了容器、算法、迭代器、仿函数、适配器、分配器。 主要谈谈容器 STL中的容器有序列容器和关联容器,容器适配器等 1)序列容器(以线性序列的方式存储元素,没对元素进行排序,元素的顺序和存储它们的顺序相同) 主要包括 vector string list deque 2)关联容器(存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高) 主要包括 set map multiset multimap 3)适配容器 就是由基本的容器适配(改造)出来的

牵LV小猪精的博客 331

C++ | STL标准库之关联容器

文章目录前言一、map二、set三、关联容器迭代器四、无序容器总结 前言 上一篇顺序容器中,元素按照它们在容器中的位置来顺序保存和访问。本文关联容器中,元素是按照关键字来保存和访问的。 关联式容器支持高效的关键字查找和访问,标准库提供了8个关联容器,4个有序:map、set、multimap、multiset ; 4个无序:unordered_map、unordered_set、unordered_multimap、unordered_multiset。这些容器都基于两个主要的关联容器:map和set。

weixin_44742670的博客 944

嵌入式NTC温度解算库:Steinhart-Hart定点实现与硬件解耦设计

NTC热敏电阻是嵌入式系统中最常用的模拟温度传感器,其阻值-温度关系高度非线性,需依赖Steinhart-Hart方程实现高精度转换。该方程通过三参数对数多项式建模,理论上可将误差控制在±0.1°C以内,但直接移植到MCU面临浮点开销大、定点溢出、系数精度损失等工程瓶颈。为此,归一化处理(ln(R/R₂₅))、Q24.8定点运算、查表+插值对数计算等优化技术成为资源受限场景下的关键技术路径。其核心价值在于将ADC采样与温度解算彻底解耦,适配各类HAL/裸机/RTOS环境,广泛应用于电池管理、工业PLC、Io

weixin_35756624的博客 647

echarts 生成中国陕西省份(或其他省份)的地图,大屏使用

效果图: 一、首先第一步需要下载echarts和获取到陕西身份的地图信息。 1.下载echarts链接(官网): Apache ECharts 2.生成指定省份的地图数据信息,数据可以在阿里云获取。 DataV.GeoAtlas地理小工具系列 如图,点击左圈需要的省份,这里我选择的是陕西省,然后点击右圈复制下载链接,得到一个json格式的数据,可以在json转换网站转成js格式。 Json在线解析格式化-Json在线校验Json格式化压缩-Jsons在线工具 转成js格.

PrimaryColor 3890

c++ map iterator 获取key_C++ STL源码剖析之map、multimap、initializer_list

C++ STL源码剖析之map、multimap、initializer_list大家好我是光城,欢迎关注公众号:guangcity。map/multimap 以rb_tree为底层结构,因此有元素自动排序特点,排序的依据是key。map/multimap提供"遍历"操作及iterators。按正常规则(++iter)遍历,便能够获得排序状态。我们无法使用map/multimap的iterator...

weixin_39793638的博客 452

Spark Graphx 项目实战(航班飞行网图分析)

航班飞行网图分析一.需要的技能点二.任务描述三.数据探索1.下载数据2.数据格式四.航班飞行网图问题分析1.构建航班飞行网图2.统计航班飞行网图中机场与航线的数量3.计算最长的飞行航线4.找出最繁忙的机场5.找出最重要的飞行航线6.找出最便宜的飞行航线五.代码实现 一.需要的技能点 Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel 二.任务描述 需求概述: 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任

May_J_Oldhu的博客 1538

C++ STL概论

简要介绍STL六大组件。

Spring_24的博客 335

5分钟搞定Conflux钱包注册:Fluent钱包从安装到转账全流程指南

本文提供Conflux公链上Fluent钱包的完整注册和使用指南,涵盖从安装、助记词备份到CFX转账的全流程。特别强调安全操作要点,包括助记词保管和网络选择,帮助用户5分钟内快速掌握这款国产公链钱包的核心功能,确保数字资产安全。

weixin_29181861的博客 244

英飞凌功率MOSFET SPICE 瞬态仿真不收敛问题解决(基于TINA)

英飞凌功率MOSFET SPICE仿真容易出现不收敛问题,这个对于IGBT和SIC的管子应该是一样的,在瞬态仿真分析中,出现如下图所示的报错,Convergence problem。spice是为线性电路设计的,例如运算放大器、线性电源等,不是专门仿真开关电路的。在瞬态仿真时,仿真器是要不断迭代求解的,开关快速的跳变,容易在迭代式出现不收敛的问题。,由于时间步长减少,会消耗更多的计算机内存,如果运行多次内存消耗过大,会报“Out of memory”.解决方法是:报错工程,重启软件,内存重新计算。

miaoxiaokeji的博客 2297

红黑树并没有我们想象的那么难(下)

&lt;红黑树并没有我们想象的那么难&gt; 上、下两篇已经完成, 希望能帮助到大家. 红黑树并没有我们想象的那么难(上): http://daoluan.net/blog/?p=2057 红黑树并没有我们想象的那么难(下): http://daoluan.net/blog/?p=2112 SGI STL map 实现概述 根据上一节的红黑树分析, 结合 sgi stl map 的...

weixin_33991418的博客 292

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

如何提高三电阻采样的调制率

wanrenqi的博客 9198

STL关联容器总结

一、关联式容器 STL 关联容器分为 set(集合)和 map(映射表)两大类,及其衍生体 multiset 和 multimap。这些容器的底层机制均以 RB-tree(红黑树)实现。RB-tree 也是一个独立容器,但并不开放使用。 SGI STL 还提供一个不在标准规格的关联式容器 hash_table(散列表),以及以 hash_table 为底层机制而完成的 hash_set散列...

marsjhao Blog 2196

2026 AI Agent Harness Engineering 生态报告:开源工具链的现状与未来趋势

IEEE P2863-2025《通用人工智能自主代理技术架构与评估规范》于2025年11月正式发布,将AI Agent(通用人工智能自主代理)定义为:一种具备感知(Perception)、记忆(Memory)、推理(Reasoning)、规划(Planning)、行动(Action)五大核心能力闭环,能够在无显式指令覆盖全部环节的前提下,自主完成特定领域或开放领域复杂任务的智能实体。

AI 算法实战派 497

利用dpabi和restplus提取ROI灰质体积学习笔记

目录前言一、数据准备二、利用dpabi提取ROI灰质体积三、restplus提取ROI灰质体积 前言 我利用SPM/CAT12进行灰质、白质、脑脊液分割之后分别已经得到各自的图像文件,在全脑水平已经做了统计分析。如果还想要进一步进行ROI的统计分析或者与量表等临床资料做相关分析,就需要提取ROI灰质体积。几个月没动过这数据了,突然心血来潮想学一下如何提取ROI灰质体积,以此篇博客记录我的提取ROI灰质体积学习过程。提取ROI灰质体积的方法及软件有许多种,本人尝试了dpabi和restplus。 一、数据准备

weixin_52073820的博客 9224

【STL】关联容器的分类

本文的所有语句都经本人验证,均正确使用。由于本文涉及内容比较多,为了尽可能的讲详细些,会把各种例子附上,所以代码样例会比较多,也为了更好的布局,本系列将分开讲解,并且前期为了更加贴合实战需求,暂时只对一些常用的STL容器和基本功能进行讲解。为了使每篇文章具有一定的独立性,后续的文章大多数会将之前文章涉及的知识点中提取,并且在后续会将相应的例子补上。本文STL系列知识参考《C++语言程序涉及(第5版)》

weixin_45720193的博客 1057

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

STL 关联容器

std::unordered_set 是一个值的哈希表,值本身就是 key。其中,std::unordered_set、std::unordered_multiset、std::unordered_map。与顺序容器(如 std::vector、std::deque 等)不同,关联容器中的元素是通过。(C++11起)std::unordered_set、std::unordered_multiset。(C++11起)std::unordered_map、std::unordered_multimap。

yuzhebalabala的博客 756

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【STL八】关联容器

关联式容器存储的元素,都是一个一个的“键值对”。

junxuezheng的博客 1214

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STL之三:关联容器

关联容器通过 ​键(Key)​ 高效存储和访问元素,它们的元素位置取决于键值,而非插入顺序。主要分为两类:1.无序关联容器,依赖于链式哈希表,增删查O(1)使用头文件:#include<unordered_set>、#include<unordered_map>set:集合 key map:映射表[key, value](键值对) unordered_set:单重集合 unordered_multiset:多重集合 unordered_map:单重映射表 unordered_multimap:

m0_55376255的博客 404

C++ STL(四)关联容器

std::multimap 是 C++ 标准模板库(STL)中的一个关联容器,用于存储键值对(key-value pairs),并按照键的顺序自动排序。std::multiset 的迭代器是一个双向迭代器,支持 ++ 和 -- 操作。std::set 的迭代器是一个双向迭代器,支持 ++ 和 -- 操作。与std::set 不同std::multiset允许存储重复的元素。std::set 的迭代器是一个双向迭代器,支持 ++ 和 -- 操作。:std::map 中的键是唯一的,不允许重复。

dingyahui的博客 1312

STL关联容器

关联容器有以下四种:set、multiset、map、multimap,关联容器内的元素是排序的,关联容器中的元素是从小到大排序(或按关键字从小到大排序)。关联容器带有模板参数 Key 和 Compare,这两个参数分别表示用来对内容进行排序的键类型和用于对键值进行比较的函数对象(被称为比较对象)。对于 set 和 multiset 容器,存储的键就是存储的值,都在头文件 set 中定义,两者区别...

qq_42805483的博客 273

STL-关联容器

5. 关联容器 (1)关联容器的特点 (1)容器需要存放对象和key值,key值与对象之间是一种映射关系。 (2)每个对象被存入到关联容器中时,会对key进行排序,进过比较后找到合适的 位置后存放。因此key的数据类型需要提供排序方法,可以通过提供orerator&amp;lt;() 或者Compare这两个函数进行比较。 (3)map只支持双向迭代器,因此不支持随机访问,虽然map支持[key...

GPF的博客 420

【STL】关联容器基本功能

本文的所有语句都经本人验证,均正确使用。由于本文涉及内容比较多,为了尽可能的讲详细些,会把各种例子附上,所以代码样例会比较多,也为了更好的布局,本系列将分开讲解,并且前期为了更加贴合实战需求,暂时只对一些常用的STL容器和基本功能进行讲解。为了使每篇文章具有一定的独立性,后续的文章大多数会将之前文章涉及的知识点中提取,并且在后续会将相应的例子补上。本文STL系列知识参考《C++语言程序涉及(第5版)》

weixin_45720193的博客 1298

【STL】——关联容器

1、关联容器 1.1基本概念 1.2关联容器都有的函数 2、set 详解 2.1基本操作 2.2特点 3、map详解 3.1基本操作 3.2特点 3.3关联容器在自定义类型下的使用

qq_43412060的博客 668

C++ STL之关联容器(C++ primer,P702)

关联容器将 value(值)与 key(键)关联在一起,并使用 key 来查找 value; 关联容器的优势是,提供元素的快速访问,也允许插入元素(但是不能固定位置插入) STL提供了四种有序关联容器:(底层都是树) set: 集合,key 唯一且 key 就是 value multiset: key 不唯一 map: key 与 value 不同,key 唯一 multimap: key 不唯...

pix_csdn的博客 265
上一篇: STL之哈希表
下一篇: STL之函数对象(function object)
Spring_24
博客等级 码龄12年 46粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Spring_24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值