C++ set初始化(STL set初始化)详解
2023-06-13 09:11:55 时间
通常,set T 容器内部元素的组织方式和 map K,T 相同,都是平衡二叉树。请考虑下面这个 set 容器的定义,可以用初始化列表来初始化 set 容器:
![C++ set初始化(STL set初始化)详解](http://ytso-blog-oss-img.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2021/07/20/20210720_60f63c529ef8c.jpg)
图 1 用 less int 排序的整数平衡二叉树![C++ set初始化(STL set初始化)详解](http://ytso-blog-oss-img.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2021/07/20/20210720_60f63c52ac4f4.jpg)
图 2 用 greater string 排序的字符串的平衡二叉树
std::set int numbers {8, 7, 6, 5, 4, 3, 2, 1};
默认的比较函数是 less int ,因此容器中的元素会升序排列。内部的二叉树和图 1 中所示的类似。
![C++ set初始化(STL set初始化)详解](http://ytso-blog-oss-img.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2021/07/20/20210720_60f63c529ef8c.jpg)
图 1 用 less int 排序的整数平衡二叉树
执行下面的语句后,容器中的元素变成升序:
std::copy( std::begin(numbers), std::end(numbers), std:: ostream_iterator int {std::cout, });
copy() 算法会将前两个参数指定的一段元素复制到第三个参数指定的位置,这里第三个参数是一个输出流迭代器。这条语句会输出一个从 1 至 8 的整数递增序列。
当然,也可以为元素提供不同的比较函数:
std::set std::string, std::greater string words { one , two , three , four , five , six , seven , eight
这个容器中的元素会降序排列,因此容器的树和图 2 类似。
![C++ set初始化(STL set初始化)详解](http://ytso-blog-oss-img.oss-cn-beijing.aliyuncs.com/wp-content/uploads/2021/07/20/20210720_60f63c52ac4f4.jpg)
图 2 用 greater string 排序的字符串的平衡二叉树
可以用元素段来创建 set 容器,并且可以指定它的比较函数:
std::set string words2 {std::begin(words), std::end(words)}; std::set string, std::greater string words3 {++std::begin(words2), std::end(words2)};
第一条语句定义了 words2,它包含了 words 中元素的副本,words 用默认的比较函数排序。第二条语句定义了 words3,它包含 words2 中除第一个元素外的所有元素的副本。这个容器使用 less string 实例排序。
set T 模板也定义了拷贝和移动构造函数。移动构造函数比较重要,因为它可以不通过拷贝就返回函数局部定义的 set 容器。在函数结束时会返回一个局部 set 容器,编译器会识别这个动作,从而选择使用移动构造函数来返回 set 容器。你在本章的后面会看到一个这种用法的示例。
21749.html
相关文章
- C++ 特殊矩阵的压缩算法
- 女朋友要去面试 C++,我建议她这么做
- C++中set用法详解
- EasyC++01,从C++示例程序说起
- c++获取子类窗口句柄位置_C++中各种获取窗口句柄的方法「建议收藏」
- c++创建对话框_窗体边框改为对话框样式
- C/C++语言常用排序算法
- C/C++ 简易异或加密的分析
- 一步一步地完成题目——费解的开关(C/C++语言)递推、递归、顺序思维
- 【C++修炼之路】21.红黑树封装map和set
- 【错误记录】NDK 配置错误 ( C/C++ debug|arm64-v8a : Could not get version from cmake.dir path )
- 【C++】哈希表封装实现 unordered_map 和 unordered_set
- C++STL——map与set介绍及使用
- C++ TCP winsock 多线程编程详解编程语言
- C++ STL学习之容器set和multiset (补充材料)详解编程语言
- C++ set用法(STL set用法)详解
- C++ set保存指针(智能指针)详解
- C++运算符重载的两种方法
- 查看 Redis 中的 Set:实例指南(redis查看set)
- MySQL中SET用法详解(mysql中set 用法)
- MySQL中Set数据类型详解(mysql中set怎么用)
- MySQL中SET使用方法详解(mysql中set作用)
- Redis策略中的随机取Set精髓(redis随机取set)
- 操作使用Redis进行Set操作的实践(redis进行set)
- Redis获取Set中元素数量的方法(redis获取set个数)
- 如何用C++实现双向循环链表
- C++中用指向数组的指针作函数参数