c++ LeetCode刷题笔记 set容器 STL

c++ LeetCode刷题笔记 set容器 STL
文章内容是刷题过程和学习中关于set容器的用到的一些实用经验以及技巧

1.set和unordered_set的区别

unordered_set是C ++中的STL容器,使用方法和set差不多它以无特定顺序存储唯一元素,它使用哈希表实现,允许插入,删除和搜索操作的平均复杂度为常数时间,提供了一个类似于set容器的接口来存储元素。它类似于set容器,但由于其哈希表实现,对于大型数据集具有更好的性能,因此在做题中对时间复杂有要求的题目,建议使用 unordered_set。

2.常用操作方法

(1)set长度大小判断操作

set.size(); 返回容器中元素的数目
set.empty();判断容器是否为空

(2)set插入和删除操作

set.insert(elem); 在容器中插入一个元素。
set.clear(); 清除容器中所有元素
set.erase(pos); 删除pos迭代器所指的元素,返回下一个元素的迭代器。
set.erase(begin(), end()); 删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
set.erase(elem); 删除值为elem的元素。

(3)set查找操作

set.find(key); 查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
set.count(key); 查找键key的元素个数,也可用于判断某个元素是否在集合中出现过返回值为0表示集合中不存在该元素,返回值为1表示集合中存在该元素。
lower_bound(keyElem); 返回第一个key小于等于keyElem元素的迭代器。
upper_bound(keyElem); 返回第一个key大于keyElem元素的迭代器。
equal_range(keyElem); 返回容器中key与keyElem相等的上下限的两个迭代器。

(4)set交换操作

swap(st); 交换两个集合容器

3.一些代码讲解

(1)unordered_set的使用

#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
  unordered_set<int> mySet = {5, 2, 8, 1, 10};
  
  // 插入一个元素
  mySet.insert(7);
  
  // 遍历并打印元素
  for (auto it = mySet.begin(); it != mySet.end(); ++it) {
    cout << *it << " ";  //使用auto一定要初始化
  }
  /*也可以用以下的简单方法
  for(int i = 0 ; i < mySet.size() ; i++){
    cout<<mySet[i];
  }
  还有一种方法
  for (auto elem : mySet) {
    cout << elem << " ";
  }
  */
  
  // 检查元素是否存在
  if (mySet.count(8)) {
    cout << "8 is in the set" << endl;
  }
 /* 也可以使用find()
  if(mySet.find(8)!=mySet.end()){
    cout << "8 is in the set" << endl;
  }
  */
  // 删除元素
  mySet.erase(1);
  
  // 遍历并打印元素
  for (auto elem : mySet) {
    cout << elem << " ";
  }
  cout << endl;
  return 0;
}

说明一下,输出方法有三种,用一种自己喜欢的就行,用 auto 定义的时候一定要初始化

结尾:这是发的第一篇博客,希望记录一下自己的学习和成长过程并且分享一些有用的知识(不想一直做伸手党,呜呜~),如果有一天学有所成,再回来看这些自己的点点滴滴,肯定会有一些别样的感慨,哈哈哈。有想一起努力学习的小伙伴也可以添加联系方式QQ:2736933896一起交流学习啊,因为学习就是要不断交流,学习别人的优点,知道自己的不足。自己写的文章都会用心负责,看到大家留言的问题,能解决也会尽力解决

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值