STL中set用法

(七)set类的主要成员
set<T>是一种集合容器。
☆void clear();//删除所有元素

☆size_type count(const key_type& x)const; //返回键为x的元素的个数
☆bool empty() const; //返回是否为空
☆void erase(iterator position);//删除在位置position的元素

☆size_type erase(const key_type& x);//删除索引为x的元素    如果是multiset则索引为x的全部都删除
☆void erase(iterator first, iterator last);//删除在[first,last]间的元素
☆iterator find(const key_type& x)const;//返回索引为x的元素的指针

☆pair<iterator,bool>insert(const value_type& x);//返回<指向元素x的迭代器,是否插入成功>
☆interator lower_bound(const key_type& x)const; //返指向键不小于x的第一个元素的迭代器
☆size_type size() const;//返回set的大小
☆void swap(set& X);//与setX交换内容
☆iterator upper_bound(const key_type& x)const;//返回指向键大于x的第一个元素的迭代器

STL-set用法



// 1.set::begin/end
#include <iostream>
#include <set>
using namespace std;

int main ()
{
  int myints[] = {75,23,65,42,13,13};
  set<int> myset (myints,myints+6);
  set<int>::iterator it;
  cout << "myset contains:";
  for ( it=myset.begin() ; it != myset.end(); it++ )
    cout << " " << *it;
  cout << endl;
  return 0;


Output:
myset contains: 13 23 42 65 75

// 2.set::empty
#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  myset.insert(20);
  myset.insert(30);
  myset.insert(10);
  cout << "myset contains:";
  while (!myset.empty())
  {
     cout << " " << *myset.begin();
     myset.erase(myset.begin());
  }
  cout << endl;
  return 0;
}

Output:myset contains: 10 20 30

// 3.set::size
#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myints;
  cout << "0. size: " << (int) myints.size() << endl;
  for (int i=0; i<10; i++) myints.insert(i);
  cout << "1. size: " << (int) myints.size() << endl;
  myints.insert (100);
  cout << "2. size: " << (int) myints.size() << endl;
  myints.erase(5);
  cout << "3. size: " << (int) myints.size() << endl;
  return 0;
}
Output:0. size: 0
1. size: 10
2. size: 11
3. size: 10

// 4.set::find
#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::iterator it;
  // set some initial values:
  for (int i=1; i<=5; i++) myset.insert(i*10);    // set: 10 20 30 40 50
  it=myset.find(20);
  myset.erase (it);
  myset.erase (myset.find(40));
  cout << "myset contains:";
  for (it=myset.begin(); it!=myset.end(); it++)
    cout << " " << *it;
  cout << endl;
  return 0;
}

Output:
myset contains: 10 30 50

// 5.set::count
#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  int i;

  // set some initial values:

  for (i=1; i<5; i++) myset.insert(i*3);    // set: 3 6 9 12

  for (i=0;i<10; i++)
  {
    cout << i;
    if (myset.count(i)>0)
      cout << " is an element of myset.\n";
    else 
      cout << " is not an element of myset.\n";
  }
  return 0;
}

Output:
0 is not an element of myset.
1 is not an element of myset.
2 is not an element of myset.
3 is an element of myset.
4 is not an element of myset.
5 is not an element of myset.
6 is an element of myset.
7 is not an element of myset.
8 is not an element of myset.
9 is an element of myset.


 
// 6.set::lower_bound/upper_bound
#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::iterator it,itlow,itup;
  for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
  itlow=myset.lower_bound (30);                //       ^
  itup=myset.upper_bound (60);                 //                   ^
  myset.erase(itlow,itup);                     // 10 20 70 80 90
  cout << "myset contains:";
  for (it=myset.begin(); it!=myset.end(); it++)
    cout << " " << *it;
  cout << endl;
  return 0;
}
 
Notice that lower_bound(30) returns an iterator to 30, whereas upper_bound(60) returns an iterator to 70.
myset contains: 10 20 70 80 90


// 7.set::equal_elements

#include <iostream>

#include <set>
using namespace std;

int main ()
{
  set<int> myset;
  pair<set<int>::iterator,set<int>::iterator> ret;
  for (int i=1; i<=5; i++) myset.insert(i*10);   // set: 10 20 30 40 50
  ret = myset.equal_range(30);
  cout << "lower bound points to: " << *ret.first << endl;
  cout << "upper bound points to: " << *ret.second << endl;
  return 0;


lower bound points to: 30
upper bound points to: 40
C++ STLset是一个集合容器,其的元素是唯一的,即相同的元素只会出现一次。set是按照一定的顺序排列的,通常默认情况下是升序排列。set可以进行快速的查找、插入和删除操作,时间复杂度为O(log n)。 以下是set的常用操作: 1. 插入元素:使用insert()函数,可以插入单个元素或一组元素。 2. 删除元素:使用erase()函数,可以删除单个元素、指定位置的元素或一个范围内的元素。 3. 查找元素:使用find()函数,可以查找指定元素是否存在于set。 4. 获取set元素个数:使用size()函数。 5. 判断set是否为空:使用empty()函数。 以下是一些set的常见用法: ``` #include <iostream> #include <set> using namespace std; int main() { // 创建一个set set<int> mySet; // 插入元素 mySet.insert(3); mySet.insert(1); mySet.insert(4); mySet.insert(2); mySet.insert(5); // 遍历set的所有元素 for (auto it = mySet.begin(); it != mySet.end(); it++) { cout << *it << " "; } cout << endl; // 查找元素 if (mySet.find(4) != mySet.end()) { cout << "4 is found." << endl; } else { cout << "4 is not found." << endl; } // 删除元素 mySet.erase(4); // 遍历set的所有元素 for (auto it = mySet.begin(); it != mySet.end(); it++) { cout << *it << " "; } cout << endl; // 获取set元素个数 cout << "The size of set is " << mySet.size() << endl; // 判断set是否为空 if (mySet.empty()) { cout << "The set is empty." << endl; } else { cout << "The set is not empty." << endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值