1

【笔记】C++的set容器

 2 years ago
source link: https://feiju12138.github.io/2022/09/09/C-%E7%9A%84set%E5%AE%B9%E5%99%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

C++的set容器与multiset容器学习笔记

set和multiset属于关联式容器,在插入元素时会自动排序
set和multiset的数据结构是二叉树
set中不允许有重复元素,所以可以做去重操作
multiset中允许有重复元素

引入头文件

#include <set>
set<T> s;

multiset<T> s;
set<T> s(s);

multiset<T> s(s);

利用运算符重载赋值

s = s;

容量和大小的操作

判断容器是否为空

s.empty();

获取元素的个数

s.size();

在容器中插入数据(set)

  • 返回一个对组

<element>:元素

s.insert(<element>);

pair<set<T>::iterator, bool> p = s.insert(<element>);

在容器中插入数据(multiset)

  • 返回一个迭代器

<element>:元素

s.insert(<element>);

iterator it = s.insert(<element>);

删除迭代器位置的元素

  • 返回下一个元素的位置

<iterator>:迭代器

s.erase(<iterator>);

删除一组元素

  • 返回下一个元素的位置

<iterator_start>:开始位置迭代器
<iterator_end>:结束位置迭代器

s.erase(<iterator_start>, <iterator_end>);

删除容器中所有的元素

s.clear();

删除所有与指定元素相同的元素

<element>:元素

s.erase(<element>);
  • 获取指定元素是否存在

  • 如果元素存在,返回该元素的迭代器

  • 如果元素不存在,返回s.end()

set<T>::iterator it = s.find(<element>);
  • 统计元素的个数
  • 因为set不允许有重复元素,所以得到的结果只能是0或1。而multiset所得到的结果可能大于1
s.count(<element>);
  • 容器内数据的互换
s.swap(s);
  • 修改set容器的排序规则,实现降序排列

如果一个重载运算符的函数返回值类型为bool,权限是public,重载的运算符是小括号,那么这个函数被称为仿函数

// 创建一个类,在类中重写小括号运算符,在重新方法中定义排序规则
class Compare
{
public:
bool operator()(T t1, T t2)
{
return t1 > t2;
}
};

// 在创建set容器时,指定自定义的排序规则
set<T, Compare> s;

自定义类型

// 创建一个类,在类中重写小括号运算符,在重新方法中定义排序规则
class Compare
{
public:
bool operator()(const T & t1, const T & t2)
{
return t1 > t2;
}
};

// 在创建set容器时,指定自定义的排序规则
set<T, Compare> s;

哔哩哔哩——黑马程序员


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK