c++ STL库容器之集合set代码实例

set 简介

set是STL中一种标准关联容器,其键值就是实值,实值就是键值,不可以有重复,所以我们不能通过set的迭代器来改变set的元素的值。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。

set 初始化

set<int> seta;
 cout << "初始化前set的大小:" << seta.size() << endl;
 cout << "初始化前set是否为空: " << seta.empty() << endl;

 //初始化set
 //用insert函数初始化
 for(int i = 0; i < 10; i++)
 {
  seta.insert(i);
 }

 /*
 //这里也可以使用数组来赋值进行初始化
 int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 set<int> seta(a,a+10);
 */

 cout << "初始化后set的大小:" << seta.size() << endl;
 cout << "初始化后set是否为空: " << seta.empty() << endl;

set 基本操作

set.begin()  返回set容器的第一个元素
set.end()      返回set容器的最后一个元素
set.clear() 删除set容器中的所有的元素
set.empty()     判断set容器是否为空
set.insert() 插入一个元素
set.erase() 删除一个元素
set.size()     返回当前set容器中的元素个数

这里我们介绍几个函数

1. find

查找一个元素,如果容器中不存在该元素,返回值等于seta.end()

//使用find时要与end()进行比较
//测试find函数
 if(seta.find(0) == seta.end())
 {
  cout << "0不存在" << endl;
 }else{cout << "0存在" << endl;}

 if(seta.find(11) != seta.end())
 {
  cout << "11存在" << endl;
 }else{cout << "11不存在" << endl;}

2. erase

seta.erase()  删除一个元素

seta.clear()  删除set容器中的所有的元素
//测试erase函数
 seta.erase(9);
 cout << "删除9之后seta的值: " << endl;
 print(seta);

3. insert

//测试插入函数insert
 int a[5] = {11, 12, 13, 14, 15};
 seta.insert(a,a+5);
 cout << "插入后seta的值: " << endl;
 print(seta);

一个简单的介绍set的小程序

#include <iostream>
#include <set>

using namespace std;

//抽象一个函数,用来输出集合set中的值
void print(set<int> seta)
{
 set<int >::iterator itor = seta.begin();
 while(itor != seta.end())
 {
  cout << "set内的值为:" << *itor << endl;
  itor++;
 }
}

int main()
{
 set<int> seta;
 cout << "初始化前set的大小:" << seta.size() << endl;
 cout << "初始化前set是否为空: " << seta.empty() << endl;

 //初始化set
 //用insert函数初始化
 for(int i = 0; i < 10; i++)
 {
  seta.insert(i);
 }

 /*
 //这里也可以使用数组来赋值进行初始化
 int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 set<int> seta(a,a+10);
 */

 cout << "初始化后set的大小:" << seta.size() << endl;
 cout << "初始化后set是否为空: " << seta.empty() << endl;

 print(seta);

 //测试find函数
 if(seta.find(0) == seta.end())
 {
  cout << "0不存在" << endl;
 }else{cout << "0存在" << endl;}

 if(seta.find(11) != seta.end())
 {
  cout << "11存在" << endl;
 }else{cout << "11不存在" << endl;}

 //测试erase函数
 seta.erase(9);
 cout << "删除9之后seta的值: " << endl;
 print(seta);

 //测试插入函数insert
 int a[5] = {11, 12, 13, 14, 15};
 seta.insert(a,a+5);
 cout << "插入后seta的值: " << endl;
 print(seta);

 return 0;
}

运行结果

到此这篇关于c++ STL库容器之集合set代码实例的文章就介绍到这了,更多相关c++ STL库容器之集合set内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c++利用stl set_difference对车辆进出区域进行判定

    核心代码 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; struct _AREA_VECTOR_STRUCT { int nAreaType;//区域类型 int nAreaID;//区域ID }; void CtestDlg::OnBnClickedButton2() { vector<_AREA_VE

  • C++ STL入门教程(7) multimap、multiset的使用

    一.multimap(一对多索引) C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素. 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include <map> #include <string> #include <iostream> using namespace std; int main() { ///1. 初始化 multimap<int, st

  • c++ STL set_difference set_intersection set_union 操作

    以下是STL algorithm的几个函数,使用的条件是有序容器,所以 vector在被sort了之后是可以使用的,set也是可以使用的. set_difference 这个是求得在第一个容器中有,第二个容器中没有的.set_intersection 求两个容器的交, set_union 求两个容器的并. set_symmetric_difference 求两个容器的差. 最后使用的时候注意要提前分配好最后的盛放容器,其大小最好是两个操作容器的和,然后需要根据返回的迭代器resize一下,看下面

  • c++ STL库容器之集合set代码实例

    set 简介 set是STL中一种标准关联容器,其键值就是实值,实值就是键值,不可以有重复,所以我们不能通过set的迭代器来改变set的元素的值.它底层使用平衡的搜索树--红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高.set,顾名思义是"集合"的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(s

  • Java数组集合的深度复制代码实例

    这篇文章主要介绍了Java数组集合的深度复制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java当我们想要对一个数组进行一些操作,同时又不希望对原来的数组数据有影响的时候,使用引用是不能满足我们的需求的, 这时候我们可以使用System.arraycopy()方法实现,对用这两种复制方式,我们习惯称前者为浅复制,后者为深复制.深复制的 实现方法如下: public static void arraycopyTest() { int[

  • JavaScript删除指定子元素代码实例

    原生javascript删除指定子元素代码实例: 本章节介绍一下如何利用原生javascript实现删除指定子元素. 大家都知道使用jquery实现此功能更为方便,不过使用原生的javascript也不麻烦,下面做一下介绍. 关于jquery如何实现此功能可以参阅jquery删除指定子元素代码实例一章节. 代码实例: 复制代码 代码如下: <!DOCTYPE HTML> <html> <meta charset="utf-8"> <title&

  • java 使用foreach遍历集合元素的实例

    java 使用foreach遍历集合元素的实例 1 代码示例 import java.util.*; public class ForeachTest { public static void main(String[] args) { // 创建集合.添加元素的代码与前一个程序相同 Collection books = new HashSet(); books.add(new String("book1")); books.add(new String("book2&quo

  • Java编程二项分布的递归和非递归实现代码实例

    本文研究的主要内容是Java编程二项分布的递归和非递归实现,具体如下. 问题来源: 算法第四版 第1.1节 习题27:return (1.0 - p) * binomial(N - 1, k, p) + p * binomial(N - 1, k - 1, p); 计算递归调用次数,这里的递归式是怎么来的? 二项分布: 定义:n个独立的是/非试验中成功次数k的离散概率分布,每次实验成功的概率为p,记作B(n,p,k). 概率公式:P(ξ=K)= C(n,k) * p^k * (1-p)^(n-k

  • Hibernate hql查询代码实例

    本文研究的主要是Hibernate hql查询的相关内容,具体如下. HQL介绍 Hibernate语言查询(Hibernate Query Language,HQL)它是完全面向对象的查询语句,查询功能非常强大:具备多态.关联等特性,HQL查询也是Hibernate官方推荐使用的查询方法. 下面我们通过一个案例我分析相关查询方法 Classes.java: public class Classes { /*班级ID*/ private int id; /*班级名称*/ private Stri

  • js图数据结构处理 迪杰斯特拉算法代码实例

    这篇文章主要介绍了js图数据结构处理 迪杰斯特拉算法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 /*//1.确定数据结构, mapf[i][j] 为点i到点j的距离 [ Infinity 2 5 Infinity Infinity Infinity Infinity 2 6 Infinity Infinity Infinity Infinity 7 1 Infinity Infinity 2 Infinity 4 Infinity

  • JAVA使用动态代理对象进行敏感字过滤代码实例

    这篇文章主要介绍了JAVA使用动态代理对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 package com.hopetesting.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileNotFoundExcepti

  • Java OSS批量下载并压缩为ZIP代码实例

    这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 /** * 批量下载为zip * @param req * @param response * @param keyList oss文件路径集合 * @param fileName 下载出来的zip文件名(一般以合同名命名) 如:测试合同,zip */ public static void downForZip(HttpServlet

  • highcharts.js数据绑定方式代码实例

    这篇文章主要介绍了highcharts.js数据绑定方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一,我们先来看看异步加载数据的写法(这是使用MVC的例子) 1 js写法 <script src="~/Scripts/jquery-2.1.4.min.js"></script> <script src="~/Scripts/highcharts.js"></s

随机推荐