16.c++-std::Set(有序集合)

#include<set>
//定义一个整型数据的集合
std::set<int> set;
如同所有的STL容器一样,std::set的基本的使用是如此简单,即使使用看起来很高级的功能也并不难,STL是经过设计的调试可用的库。

下面我会展示一些简单的使用示例,这些是示例非常简单,首先介绍那个“排序”的用法:

include<set>
int array[5]={12, 34, 10, 98, 3};
const size_t array_size=sizeof(array)/sizeof(array[0]);
std::set<int> set;
for(size_t i=0; i<array_size; ++i)
{
        //把数据插入集合,数据自动排序
        set.insert(array[i]);
}

//此时已经排序了,下面依次输出
std::set<int>::const_iterator b=set.begin();
for(; b!=set.end(); ++b)
{
        std::cout << *b << '\n';
}

在一般意识中,一个集合并没有太多的操作,所有在STL中,std::set也没有太多操作,它的排序是自动的,我们可以插入一个元素,也可以删除一个元素,也有迭代器。下面简单的示例包括std::set自身的多数的特性:

#include<set>
int array[5]={12, 34, 10, 98, 3};
const size_t array_size=sizeof(array)/sizeof(array[0]);
//一个新的定义容器的方法
std::set<int> set(array, array+array_size);

//插入一个元素
set.insert(23);
//移除一个元素
set.erase(10);
//移除一个元素不在集合中的元素
//此时什么也不做,n作为返回值将会是0
//指明没有元素移除
size_t n=set.erase(11);

//使用迭代器,找到一个元素
std::set<int>::const_iterator result=set.find(98);

std::set<int> other;
//交换两个集合的内容
std::swap(set, other);

//清楚所有的内容
other.clear();

eg:

#include <iostream>
#include <set>
#include <signal.h>
using namespace std;
int main(void)
{
 std::set<int> _signals;
 _signals.insert(SIGTERM);
 _signals.insert(SIGINT);
 _signals.insert(SIGCHLD);
 for( std::set<int>::const_iterator i = _signals.begin(); i != _signals.end(); ++i)
  cout << *i << endl;
 _signals.clear();
 return 0;
}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`std::set_difference`是C++标准库中的一个算法函数,用于计算两个有序集合的差集。它将第一个集合中存在而第二个集合中不存在的元素复制到一个新的集合中。 以下是两个使用`std::set_difference`函数的C++示例: 示例1: ```cpp #include <iostream> #include <algorithm> #include <vector> int main() { int iarr1[] = {1, 2, 3, 3, 6, 7, 4, 5}; int iarr2[] = {1, 4, 3, 10, 9}; std::sort(std::begin(iarr1), std::end(iarr1)); std::sort(std::begin(iarr2), std::end(iarr2)); std::vector<int> ivec(10); auto iter = std::set_difference(std::begin(iarr1), std::end(iarr1), std::begin(iarr2), std::end(iarr2), std::begin(ivec)); ivec.resize(iter - std::begin(ivec)); for (int num : ivec) { std::cout << num << " "; } return 0; } ``` 示例2: ```cpp #include <iostream> #include <algorithm> #include <set> #include <vector> int main() { int iarr1[] = {1, 2, 3, 3, 4, 5, 6, 7}; int iarr2[] = {1, 4, 3, 9, 10}; std::multiset<int> iset1(std::begin(iarr1), std::end(iarr1)); std::multiset<int> iset2(std::begin(iarr2), std::end(iarr2)); std::vector<int> ivec(10); auto iter = std::set_difference(iset1.begin(), iset1.end(), iset2.begin(), iset2.end(), ivec.begin()); ivec.resize(iter - ivec.begin()); for (int num : ivec) { std::cout << num << " "; } return 0; } ``` 这两个示例分别使用了数组和`multiset`作为输入集合,并使用`std::set_difference`函数计算差集。最后,将差集输出到一个新的`vector`中,并打印出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值