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

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

前情回顾


在上一块石碑中,我学到了,同时下一块石碑也显露出来…


🚄上章地址:第九层(7):STL之list


set/multiset


概念


所有插入到set/multiset的数据,都会自动被排序,set/multiset的本质其实是二叉树


区别


set中不可以插入重复的元素

multiset可以插入重复的元素


构造函数


set/multiset的构造有两个,这里拿set的构造举例,multiset与set是一样的

set< T >;//默认构造
set(const set& s);//将s的数据拷贝到本身


使用:


#include<iostream>
#include<set>
using namespace std;
void print(set<int>& s)
{
  for (set<int>::iterator b = s.begin();b != s.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  set<int> s;
  s.insert(10);
  print(s);
  set<int> s1(s);
  print(s1);
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


赋值函数


对于set/multiset而言,赋值操作只有一个,是操作符重载

set& operator=(const set &s);//将s的值拷贝到本身


使用:


#include<iostream>
#include<set>
using namespace std;
void print(set<int>& s)
{
  for (set<int>::iterator b = s.begin();b != s.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  set<int> s;
  s.insert(10);
  print(s);
  set<int> s1;
  s1 = s;
  print(s1);
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


大小操作函数


在set/multiset中,对于大小是不能重新命名的,只能知道有多少个元素,或者是否为空

size()://返回容器中元素个数
empty();//判断容器是否为空


使用:


#include<iostream>
#include<set>
using namespace std;
void test1()
{
  set<int> s;
  if (s.empty())
  {
  cout << "为空" << endl;
  }
  cout << s.size() << endl;
}
int main()
{
  test1();
  return 0;
}

2d65d23f6d4748949b924e4057485923.png


交换函数


set中也可以让两个容器之间进行交换,也是swap

swap(s);//和s交换数据


使用:


#include<iostream>
#include<set>
using namespace std;
void print(set<int>& s)
{
  for (set<int>::iterator b = s.begin(); b != s.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  set<int> s;
  s.insert(1);
  set<int> s1;
  s1.insert(0);
  cout << "交换前" << endl;
  print(s);
  print(s1);
  s.swap(s1);
  cout << "交换后" << endl;
  print(s);
  print(s1);
}
int main()
{
  test1();
  return 0;
}

2e9b90b2ca334476abebe75bafe6eeaa.png


插入函数


在set中,只有一种插入方式

insert(T elem);//插入一个elem


使用:


void test1()
{
  set<int> s;
  s.insert(1);
  set<int> s1;
  s1.insert(0);
  cout << "交换前" << endl;
  print(s);
  print(s1);
  s.swap(s1);
  cout << "交换后" << endl;
  print(s);
  print(s1);
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png

同时验证了,插入进去的数会自己进行排序,排序为从小到大


删除函数


删除函数有四个基本的

clear();//删除容器中所有元素
erase(pos);//删除迭代器pos指向的元素,返回下一个元素的迭代器
erase(beg,end);//删除迭代器beg到end之间的元素,返回下一个元素的迭代器
erase(T elme);//删除容器中所有的elem,在set中是一个,但是multiset中可能有多个


使用:


#include<iostream>

#include<set>
using namespace std;
void print(set<int>& s)
{
  for (set<int>::iterator b = s.begin(); b != s.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  set<int> s;
  for (int i = 0; i < 10; i++)
  {
  s.insert(i);
  }
  print(s);
  set<int>::iterator b = s.begin();
  b++; b++; b++; b++; b++;
  s.erase(b);
  print(s);
  set<int>::iterator b1 = s.begin();
  b1++; b1++; b1++; b1++; b1++;
  s.erase(b1, s.end());
  print(s);
  s.erase(0);
  print(s);
  s.clear();
  print(s);
}
int main()
{
  test1();
  return 0;
}


0eacb84100b54626af849e6b562bf92a.png

0eacb84100b54626af849e6b562bf92a.png

相关文章
|
5月前
|
C++ 容器
【C++】红黑树模拟实现STL中的map与set
【C++】红黑树模拟实现STL中的map与set
|
4月前
|
C++ 容器
C++之set/multiset容器
C++之set/multiset容器
|
4月前
|
存储 自然语言处理 C++
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
36 0
【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍
|
4月前
|
存储 编译器 C++
|
3月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
52 0
|
5月前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(下)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
40 1
|
5月前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(中)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
43 1
|
5月前
|
存储 自然语言处理 C语言
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(上)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
52 1
|
5月前
|
存储 C++ 容器
C++:STL - set & map
C++:STL - set & map
38 4
|
5月前
|
存储 Serverless C++
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
53 1