STL学习(二)set容器学习

本文通过示例代码详细介绍了C++ STL中set的基本用法及其底层实现原理,并对比了set与hash_set的不同之处。文章展示了如何使用set进行数据的插入、查找、删除等操作,并解释了这些操作的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在STL中,set是以红黑树(RB-tree)作为底层数据结构的,hash_set是以Hash table(哈希表)作为底层数据结构的。set可以在时间复杂度为O(logN)情况下插入、删除和查找数据。hash_set操作的时间复杂度则比较复杂,这取决于哈希函数和哈希表的负载情况。

     

#include <set>
#include <iostream>
using namespace std;

int main()
{

  set<string> person;
  person.insert("power");

  int count = person.count("power");
  if(count == 1)
  {
    cout << "person has power" << endl;
  }
  else
  {
    cout << "person has not power" << endl;
  }

  person.insert("health");
  person.insert("magic");

  pair<set<string>::iterator,bool> ret;
  ret = person.insert("dodge");

  set<string> orcish;
  orcish.insert(person.begin(),person.end());//return void

  set<string>::iterator iter = orcish.begin();


  cout << "list of person : " << endl;
  for(;iter!= orcish.end();iter++)
    cout<< "person has:" << *iter<< endl;

  cout<<endl;

  /*the key in set is const*/
  set<string>::iterator ret2 = person.find("health");
  cout << "ret2 is " << *ret2 << endl;

  cout << person.erase("health")<<endl;

  person.clear();

  cout << "size of person : " << person.size() << endl;
  return 0;
}

附:set基本操作
begin()         返回指向第一个元素的迭代器
clear()         清除所有元素
count()         返回某个值元素的个数
empty()         如果集合为空,返回true
end()           返回指向最后一个元素的迭代器
equal_range()   返回集合中与给定值相等的上下限的两个迭代器
erase()         删除集合中的元素
find()          返回一个指向被查找到元素的迭代器
get_allocator() 返回集合的分配器
insert()        在集合中插入元素
lower_bound()   返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()      返回一个用于元素间值比较的函数
max_size()      返回集合能容纳的元素的最大限值
rbegin()        返回指向集合中最后一个元素的反向迭代器
rend()          返回指向集合中第一个元素的反向迭代器
size()          集合中元素的数目
swap()          交换两个集合变量
upper_bound()   返回大于某个值元素的迭代器
value_comp()    返回一个用于比较元素间的值的函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值