C++容器(五):set类型
set类型
map容器是键-值对的集合,好比以任命为键的地址和电话号码。而set容器只是单纯的键的集合。当只想知道一个值是否存在时,使用set容器是最适合。
使用set容器必须包含set头文件:
#include <set>
set容器支持大部分map操作,包括:
- 关联容器中通用的操作。
- 三种构造函数。
insert操作。count和find操作。erase操作。
另外,还有些例外,包括:set不支持下标操作符,而且没有定义mapped_type类型。在set容器中,value_type不是pair类型,而是与key_type相同的类型。
1 set容器的定义和使用
与map一样,set容器存储的键也必须唯一,且不能修改。以一段范围内的元素初始化set对象,或在set对象中插入一组元素时,对于每个键,事实上都只添加了一个元素:
// define a vector with 20 elements, holding two copies of each number from 0 to 9
vector<int> ivec(20);
for ( int i=0; i<10; ++i )
{
ivec[2*i] = i;
ivec[2*i+1] = i;
}
// iset holds unique elements form ivec
set<int> iset( ivec.begin(), ivec.end() );
cout << ivec.size() << endl; // prints 20
cout << iset.size() << endl; // prints 10
上段代码,首先创建了一个名为ivec的int型vector容器,存储20个元素:0~9(包括9)中每个整数都出现了2次,然后用ivec中所有的元素初始化一个int型的set容器,且这个set容器仅含有10个不同的元素。
2 在set容器中添加元素
// first
set<string> mySet; // empty set
mySet.insert("the"); // mySet now has one element
mySet.insert("and"); // mySet now has two elements
// second
set<int> mySet2; // empty set
mySet2.insert( ivec.begin(), ivec.end() ); // mySet2 has 10 elements
3 从set中获取元素
set容器不提供下标操作符。为了通过键从set中获取元素,可使用find运算。如果只需简单地判断某元素是否存在,同样可以使用count运算,当然其返回值只能是1(存在)或0(不存在):
iset.find(1); // returns iterator that refers to the element with key == 1
iset.find(11); // returns iterator == iset.end()
iset.count(1); // returns 1
iset.count(11); // returns 0
set中的键为const类型,在获得指向set中某元素的迭代器后,只能对其做读操作,而不能做写操作:
// iter refers to the element with key == 1
set<int>::iterator iter = iset.find(1);
*iter = 11; // error; keys in a set are read-only
cout << *iter << endl; // ok; can read the key
其他操作就不再累述。
参考文献:
- 《C++ Primer中文版(第四版)》,Stanley B.Lippman et al. 著, 人民邮电出版社,2013。
C++容器(五):set类型的更多相关文章
- Spring的IoC容器注入的类型
Spring除了可以注入Bean实例外,还可以注入其他数据类型. 注入基本数据类型 xml配置文件中的init-method="init"属性是取得Bean实例之后,输入属性值后自 ...
- Effective STL 为包含指针的关联容器指定比较类型
// 为包含指针的关联容器指定比较类型.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <set> #incl ...
- { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型
MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...
- 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...
- 从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?
这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ...
- 关联容器--保存指针时要指定容器的比较类型---引用Effective STL
无论何时你建立指针的关联容器,注意你也得指定容器的比较类型.大多数时候,你的比较类型只是解引用指针并比较所指向的对象(就像上面的StringPtrLess做的那样).鉴于这种情况,你手头最好也能有一个 ...
- Spring 切面可以应用五种类型的通知?
Spring 切面可以应用五种类型的通知: before:前置通知,在一个方法执行前被调用. after: 在方法执行之后调用的通知,无论方法执行是否成功. after-returning: 仅当方法 ...
- 《InsideUE4》UObject(五)类型系统信息收集
在一起!在一起! 引言 前文中我们阐述了类型系统构建的第一个阶段:生成.UHT分析源码的宏标记并生成了包含程序元信息的代码,继而编译进程序,在程序启动的时候,开始启动类型系统的后续构建阶段.而本文我们 ...
- JavaScript学习笔记(五)——类型、转换、相等、字符串
第六章 类型 相等 转换等 一.类型 1 typeof(); typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型. 例: <script language=" ...
- Oracle 索引扫描的五种类型
之前在讨论CBO和RBO的时候提到了索引扫描的几种类型. Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/20 ...
随机推荐
- fflush()函数总结
1. 概述 函数名: fflush() 功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时 头文件: stdio.h 原型: int fflush(FILE *stream),其中st ...
- JS数据分组[JSON]
JS 数据分组 var arr = [{ "id": "1001", "name": "值1", "value ...
- vue文件目录结构
使用node和npm环境,很容易搭建起一个vue环境.搭建完成以后,项目基本结构,如下图所示: 1.build: bulid文件夹保存的是一些webpack的初始化配置 2.config: confi ...
- crm 系统项目(三) 自动分页
crm 系统项目(三) 自动分页 需求: 1. 做一个自动分页, 每15条数据1页 2. 让当前页数在中间显示 3. 上一页, 下一页 注意情况: 1.总页数 小于 规定显示的页数 2. 左右两边极值 ...
- unity 支持圆形、切倒角和虚化UGUI Shader
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt ...
- Visual Studio 2015 改变窗体图标 & 任意位置打开窗体 & 禁止鼠标改动窗体大小
1.改变窗体图标 先把图标放到项目文件夹中,然后点击窗体属性的ICON添加即可. 参考:https://www.cnblogs.com/yangxuli/p/8075484.html?tdsource ...
- Eclipse配置Maven私服
Eclipse配置Maven私服 前言: 搭建Maven私有仓库的主要目的,是为了在团队多人开发时,只要内网的私有仓库有下载过依赖的jar包,就直接从私有仓库获取,不再通过外网的中央仓库.如果私服上面 ...
- Oracle 学习笔记 14 -- 集合操作和高级子查询
Oracel提供了三种类型的集合操作:各自是并(UNION) .交(INTERSECT). 差(MINUS) UNION :将多个操作的结果合并到一个查询结果中,返回查询结果的并集,自己主动去掉反复的 ...
- tensorfllow MNIST机器学习入门
MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...
- 07:清泉-改(prime+堆)
时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 512000kB 描述 华北电力大学可以抽象为一张有n个点m条边的无向图. 现在所有的边都断了. 修复每条边都有个不同 ...