C++ STL set容器使用教程

这篇具有很好参考价值的文章主要介绍了C++ STL set容器使用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

set 为关联式容器,翻译为集合,其中的元素类型为 pair,需要注意 set 容器存储的各个键值对,要求键 key 和值 value 必须相等

基于 set 容器的这种特性,当使用 set 容器存储键值对时,只需要为其提供各键值对中的 value 值(也就是 key 的值)即可。

{<'a', 'a'>, <'b', 'b'>, <'c', 'c'>}
// 当要使用set容器存储上面这种键值对时,就可以转换成这样
{'a','b','c'}

set 容器会自行根据键的大小对存储的键值对进行排序,因为 set 容器中各键值对的键 key 和值 value 是相等的,根据 key 排序,也就等价为根据 value 排序。

    1. 唯一性set中元素没有重复值
    1. 有序性set容器中的元素按照升序排列

引用头文件

#include <set>

初始化赋值

set<int> set2(set1);

set<int> set1 = {1, 2, 3};

vector<int> v = {1, 2, 3, 4};
set<int> s(v.begin(), v.end());

遍历 set 容器

不支持通过 索引 遍历

1. 迭代器遍历

void PrintfVector(set<int> s)
{
	// 注:如果参数为const set<int> 需要用const_iterator
	// set<int>::const_iterator iter=s.begin();
	
	for(set<int>::iterator it = s.begin(); it != s.end(); ++it)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
}

2. auto

void PrintfSet(set<int> s)
{
	// 注:如果参数为const set<int> 需要用const_iterator
	// set<int>::const_iterator iter=s.begin();
	
	for(auto it = s.begin(); it != s.end(); ++it)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
}

3. range for循环

void PrintfSet(set<int> s)
{
	// 注:如果参数为const vector<int> 需要用const_iterator
	// vector<int>::const_iterator iter=v.begin();
	
	for(auto key : s)
	{
		cout<<( key )<<" ";
	}
	cout<<endl;
}

4. for_each

for_each(iterator beg, iterator end, _callback);

set<int> s = {3,5,1,7,10};   // vector容器
 
auto print = [](const auto& x)  // 定义一个lambda表达式
{
    cout << x << ",";
};
for_each(cbegin(v), cend(v), print);// for_each算法
 
for_each(                      // for_each算法,内部定义lambda表达式
    cbegin(v), cend(v),        // 获取常量迭代器
    [](const auto& x)          // 匿名lambda表达式
    {
        cout << x << ",";
    }
);

迭代器

set 中,迭代器只支持 ++–- 操作

vector 常用方法

方法 说明
begin() 返回指向容器中第一个(注意,是已排好序的第一个)元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
end() 返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
rbegin() 返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
rend() 返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。通常和 rbegin() 结合使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。
cbegin() 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。
cend() 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。
find(val) 在 set 容器中查找值为 val 的元素,如果成功找到,则返回指向该元素的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
count(val) 在 set 容器中查找值为 val 元素的数量,由于set 中没有重复 key,所以其返回结果为 0/1
lower_bound(val) 返回一个指向当前 set 容器中第一个大于或等于 val 的元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
upper_bound(val) 返回一个指向当前 set 容器中第一个大于 val 的元素的迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。
size() 返回 set 容器中元素数量
insert(key) 在 set 容器中插入元素 key,set 容器会自动进行排序
erase(key) 在 set 容器中删除元素 key
clear(key) 删除 set 容器中所有元素

返回 set 长度

s.size() 返回 set s 的元素个数文章来源地址https://www.toymoban.com/news/detail-689233.html

插入元素

  1. s.insert(key) 将元素 key 插入到 s 中
  2. s.insert(v.begin(), v.end()) 将 v 中元素插入到 s 中
  3. s.insert( {key1, key2, key3} ) 插入多个元素
set<int> s = {1, 2, 3};
vector<int> v = {4, 5, 6};
s.insert(7);
s.insert(v.begin(), v.end()-1); // 插入 4 5
s.insert({8, 9}); // 插入 8 9

删除元素

  1. s.erase(key) 删除值为 key 的元素
  2. s.erase(s.begin(), s.end()) 删除 迭代器区间 的元素
set<int> s = {1, 2, 3, 4, 5, 6};
s.erase(6);
set<int>::iterator it = s.begin();
set<int>::iterator it1 = s.end();
it++;
it1--;
s.erase(it, it1 );  // s: 1 5

到了这里,关于C++ STL set容器使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ STL set容器

    和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。 举个例子,如下有 2 组键值对数据: {\\\'a\\\', 1, \\\'b\\\', 2, \\\'c\\\', 3} {\\\'a\\\', \\\'a\\\', \\\'b\\\', \\\'b\\\', \\\'c\\\', \\\'c\\\'} 显然,第一组数据中各键值对的键和值不相等,而第二组中各键值对的键和值对应相等。对于 set 容器来

    2024年02月02日
    浏览(30)
  • C++高级编程——STL:list容器、set容器和map容器

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ---------第3阶段-C++核心编程, -----

    2024年01月25日
    浏览(37)
  • 【C++】数据结构的恶龙set和map来了~

    下一篇AVL树难点中的难点~   文章目录 前言 一、set的介绍 二、map的介绍        题目练习 总结   1.关联式容器 在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、 forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面

    2024年02月05日
    浏览(30)
  • Python教程(12)——Python数据结构集合set介绍

    集合是一种无序、可变的数据结构,它也是一种变量类型,集合用于存储唯一的元素。集合中的元素不能重复,并且没有固定的顺序。在Python 提供了内置的 set 类型来表示集合,所以 set 就是集合的意思。 你可以使用大括号 {} 或者 set() 函数来创建一个集合。 需要注意

    2024年02月10日
    浏览(28)
  • 数据结构,Map和Set的使用方法

    在数据结构中我们经常会使用到 Map 和 Set ,Map 和 Set 到底是什么,它怎样去使用呢?因此博主整理出 Map 和 Set 这两个接口的介绍与使用方法。 目录 1. 啥是Map和Set? 1.1 Map和Set的模型 2. Map的使用 2.1Map的说明 2.2 Java中Map常用的方法 3. Set的使用 3.1Java中Set的常用方法  Map 和 Set

    2023年04月26日
    浏览(34)
  • 【每日算法 && 数据结构(C++)】—— 01 | 平方值去重统计(解题思路STL法,双指针法、流程图、代码片段)

    “Success is not final, failure is not fatal: It is the courage to continue that counts.” - Winston Churchill (成功并非终点,失败并非致命:真正重要的是继续前行的勇气 - 温斯顿·丘吉尔) 给你一个整数数组,数组中的数可以是正数、负数、零,请实现一个函数,返回这个数组中所有数的平方

    2024年02月12日
    浏览(41)
  • 【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C++   🔝🔝 在学习了二叉搜索树后,现在 就可以来学习map和set了,虽然 它们的底层是红黑树结构,但是红黑树 的本质也是一颗二叉搜索树! 本质重点: 本

    2024年02月05日
    浏览(25)
  • 【C++】树形结构的关联式容器(map、set)

    根据应用场景的不同,STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:使用平衡搜索树(即红黑树)作为其底层结果,容器中的元素是一个有序的序列。下面一依次介绍每一

    2024年02月14日
    浏览(28)
  • 【C++】STL——set/multiset 和 map/multimap的使用

    在初阶阶段,我们已经接触过STL中的部分容器 比如:vector、list、deque、forward_list(C++11)等,这些容器统称为 序列式容器 ,因为其底层为线性序列的数据结构,里面存储的是元素本身。 而今天我们要学习的几个容器称为关联式容器,那什么是关联式容器?它与序列式容器有什

    2024年02月14日
    浏览(31)
  • 【C++】 使用红黑树模拟实现STL中的map与set

    前面的文章我们学习了红黑树,也提到了C++STL中的map和set的底层其实就是用的红黑树来实现的(而map和set的使用我们前面也学过了)。 既然红黑树我们也学习过了,那这篇文章我们就用红黑树来简单实现一下STL中的map和set,重点是学习它的框架。 上一篇文章我们实现了红黑

    2024年02月12日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包