第九层(8):STL之set/multiset(下)

简介: 第九层(8):STL之set/multiset(下)

查找函数


在set中还可以查找一个元素是否存在,查找方式是通过key

find(key);//查找key是否存在,存在返回元素的迭代器,不存在返回end()


使用:


#include<iostream>
#include<set>
using namespace std;
void test1()
{
  set<int> s;
  for (int i = 0; i < 10; i++)
  {
  s.insert(i);
  }
  set<int>::iterator f=s.find(10);
  if (f != s.end())
  {
  cout << "找到了" << endl;
  }
  else
  {
  cout << "没有找到" << endl;
  }
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


统计函数


可以统计这个容器有多少个这个元素,对于set来说,只有0和1,因为set是不可以拥有重复数据的

count(key);//统计key的个数


使用:


#include<iostream>
#include<set>
using namespace std;
void test1()
{
  set<int> s;
  for (int i = 0; i < 10; i++)
  {
  s.insert(i);
  }
  cout << s.count(10) << endl;
  cout << s.count(7) << endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


为什么set不可以插入重复数据


那为什么multiset可以插入重复数据,set不可以呢?它们的区别就在这里,其他都一样,这是因为什么?是因为在set插入数据的时候,会返回插入结果,表示是否插入成功,但是multiset不会,那set怎么去检测插入是否成功呢?这里可以使用pair数组,因为对于set插入失败成功所返回的值就是用pair数组去接收的


pair数组


pair数组是一个拥有两种数据类型的数组,都需要使用的时候去规定,在set中,已经封装好pair数组的两个元素了,第一个为迭代器,第二个是bool,这个时候,如果插入成功,bool会返回真,如果没有插入成功,会返回假,可以去使用一下,在set插入中pair的接收是这样的:

pair< set< T >:: iterator , bool >;


检测:


#include<iostream>
#include<set>
using namespace std;
void test1()
{
  set<int> s;
  pair<set<int>::iterator, bool> in = s.insert(10);
  pair<set<int>::iterator, bool> in1 = s.insert(10);
  if (in.second/*访问第二个数据类型的元素*/)
  {
  cout << "插入成功" << endl;
  }
  else 
  {
  cout << "插入失败" << endl;
  }
  if (in1.second/*访问第二个数据类型的元素*/)
  {
  cout << "插入成功" << endl;
  }
  else
  {
  cout << "插入失败" << endl;
  }
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


pair数组创建


在有两个成对的数据出现的时候,就可以利用pair接收两个数据,那怎么去创建一个pair数组呢?有两种方式

pair< T1, T2/*数据类型*/ > p(t1 ,t2/*数据*/);
pair< T1, T2/*数据类型*/ > p=make_pair(t1 ,t2/*数据*/);


使用:


#include<iostream>
#include<set>
using namespace std;
void test1()
{
  pair<int, int > p(10, 20);
  cout << p.first << " " << p.second << endl;
  pair<int, int>p1 = make_pair(10, 20);
  cout << p1.first << " " << p1.second << endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


怎么样去改变set容器的排序规则


如果现在创建了一个set容器,但是不想让它按着从小到大的顺序排,想按照从大到小排,可以吗?是可以的,可以利用仿函数去改变,将有这个仿函数的类当类型传给set容器

使用:


#include<iostream>
#include<set>
using namespace std;
class sort_big
{
public:
  bool operator()(int v1, int v2) const
  {
  return v1 > v2;
  }
};
void test1()
{
  set<int, sort_big> s;
  for (int i = 0; i < 10; i++)
  {
  s.insert(i);
  }
; for (set<int,sort_big>::iterator b = s.begin(); b != s.end(); b++)
  {
  cout << *b << " ";
  }
}
int main()
{
  test1();
  return 0;
}

2d65d23f6d4748949b924e4057485923.png


下一座石碑


这座石碑倒下了,露出了下一座石碑…


😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔

🚀专栏:C++爬塔日记

🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉


相关文章
|
9月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
271 2
|
6月前
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
256 0
|
9月前
|
存储 算法 C++
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
407 3
|
存储 编译器 C++
|
C++ 容器
C++之set/multiset容器
C++之set/multiset容器
112 1
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
134 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(下)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
164 1
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(中)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
196 1
|
存储 自然语言处理 C语言
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(上)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
233 1
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧