本小节主要讲set的使用方法。

关联容器将值和键关联在一起,并使用键来查找值。

关联容器的优点在于:它提供了对元素的快速访问。插入元素的时候,不需要指定插入位置,因为关联容器是排过序的,它知道新元素来了该放到哪里去。

关联容器通常是用某种树来实现的。相对链表而言,树的查找速度更快。

最简单的关联容器就是set ,意思是集合。它的值类型和键是一样的,键是唯一的,也意味着集合中不会有相同的键,或者说值也是唯一的。值就是键。multiset类似于set 只是可能有多个值的键是相同的。

map中值与键的类型不同,键是唯一的,每个键只对应一个值。multimap与map类似,只是一个键可以与多个值相关联。

set也使用模板参数类确定存储的值的类型。

set<string> A //  a set of string objects

集合的运算主要有:并集、交集、差集、等,具体的请看例子代码。

// Example16.13setops.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
#include <map>//为了演示multimap的用法
//下面的代码是为了演示multimap的用法
typedef int KeyType;
typedef std::pair<const KeyType, std::string> Pair;
typedef std::multimap<KeyType,std::string> MapCode;
//上面的代码是为了演示multimap的用法int main()
{// std::cout << "Hello World!\n";using namespace std;const int N = 6;string s1[N] = {"buffoon","thinkers","for","heavy","can","for"};string s2[N] = { "metal","any","food","elegant","deliver","for"};set<string> A(s1,s1+N);//数组中for出现了两次,在集合A中只会出现一次set<string> B(s2, s2 + N);ostream_iterator<string, char> out(cout," ");cout << "Set A :";copy(A.begin(),A.end(),out);//数组中for出现了两次,在集合A中只会出现一次,而且集合中元素会被排序//Set A :buffoon can for heavy thinkerscout << endl;cout << "Set B :";copy(B.begin(), B.end(), out);//Set B :any deliver elegant food for metalcout << endl;cout << "Union of A and B :";set_union(A.begin(),A.end(),B.begin(), B.end(), out);//Union of A and B :any buffoon can deliver elegant food for heavy metal thinkerscout << endl;cout << "Intersection of A and B :";set_intersection(A.begin(), A.end(),B.begin(), B.end(), out);// Intersection of A and B :forcout << endl;cout << "Difference of A and B :";set_difference(A.begin(),A.end(),B.begin(), B.end(), out);//两个集合的差是第一个集合减去两个集合都有的元素。Difference of A and B :buffoon can heavy thinkerscout << endl;set<string> C;cout << "Set C:";set_union(A.begin(), A.end(), B.begin(), B.end(), insert_iterator<set<string>>(C,C.begin()));copy(C.begin(),C.end(),out);//Set C:any buffoon can deliver elegant food for heavy metal thinkerscout << endl;string s3("grungy");C.insert(s3);cout << "Set C after insertion:";copy(C.begin(),C.end(),out);//Set C after insertion:any buffoon can deliver elegant food for grungy heavy metal thinkerscout << endl;cout << "Showing a range:";copy(C.lower_bound("ghost"),C.upper_bound("spook"),out);//lower_bound()将键作为参数,并返回一个迭代器,该迭代器指向集合中第一个不小于键参数的成员,本例子是返回 grungy//upper_bound()将键作为参数,并返回一个迭代器,该迭代器指向集合中第一个大于键参数的成员,本例子是返回了 thinkers//Showing a range:grungy heavy metalcout << endl;//下面的代码是为了演示multiset 的用法cout << "***下面的代码是为了演示multimap 的用法***\n";MapCode codes;codes.insert(Pair(415,"San Francisco"));codes.insert(Pair(510, "Oakland"));codes.insert(Pair(718, "Brooklyn"));codes.insert(Pair(718, "Stanten Island"));codes.insert(Pair(415, "San Rafael"));codes.insert(Pair(510, "Berkeley"));cout << "Number of cities with area code 415: "<<codes.count(415)<<endl;cout << "Number of cities with area code 718: " << codes.count(718) << endl;cout << "Number of cities with area code 510: " << codes.count(510) << endl;cout << "Area Code City\n";MapCode::iterator it;for (it = codes.begin();it != codes.end(); ++it)cout << " " << (*it).first << " " << (*it).second << endl;pair<MapCode::iterator, MapCode::iterator> range = codes.equal_range(718);cout << "Cities with area code 718: \n";for (it = range.first; it != range.second; ++it)cout << (*it).second << endl;//上面的代码是为了演示multiset 的用法return 0;
}

以上代码还包括了multimap的使用。

C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp相关推荐

  1. C++PrimerPlus(第6版)中文版:Chapter16.1string类_16.3hangman.cpp

    这是一个历史悠久的小游戏,早在维多利亚时代就已流行起来,规则简单且有趣,在7步之内猜出单词,否则小人将会"上吊". Hangman直译为"上吊的人",是一个猜单 ...

  2. 《C++ Primer 第5版》-11.1使用关联容器-康奈尔笔记

    引入:2018年10月看<C++ Primer 第5版>而写的简单笔记 使用关联容器 使用map 使用set Map set 关联容器 Map头文件 Set头文件 Multimap头文件 ...

  3. C++PrimerPlus(第6版)中文版:Chapter8.2.4_Example8.6strc_ref.cpp

    引用非常适合于结构和类,下面的例子就演示了这一点. // Chapter8.2.4_Example8.6strc_ref.cpp.cpp : 此文件包含 "main" 函数.程序执 ...

  4. WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版

    原文地址: <WCF服务编程>第4版本翻译完毕!2016年底应该出版 [置顶]↑ WCF服务编程(4):<WCF服务编程>第3版中文版翻译结束,即将出版 ↑ 作为世界范围内最经 ...

  5. python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf

    作 者 :(美)比斯利,(美)琼斯著 出版发行 : 北京:人民邮电出版社 , 2015.05 ISBN号 :978-7-115-37959-7 页 数 : 684 原书定价 : 108.00 开本 : ...

  6. C++Primer Plus第6版C Primer Plus第6版 中文版免费分享啦

    最近在学习C++,用的资料是师兄分享的经典书籍<C++Primer Plus第6版中文版>的PDF,自带书签,使用很方便.但师兄说这个是他在网上花了积分才下载下来的,这让我很是吃惊,因为作 ...

  7. python学习手册-Python学习手册(第4版) 中文版.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython Python学习手册(第4版) 中文版.pdf11 ...

  8. 《C++ Primer中文版(第五版)》 第九章 顺序容器

    <C++ Primer中文版(第五版)> 第九章 顺序容器 元素在顺序容器中的顺序与其加入容器时的位置相对应.关联容器中元素的位置由元素相关联的关键字值决定. 所有容器都共享公共的接口,不 ...

  9. C Primer Plus(第5版)中文版

    1. 在声明一个简单变量和数组时使用关键字const很简单.指针则要复杂一些,因为不得不把让指针本身成为const与让指针指向的值成为const区分开来.下面的声明表明pf指向的值必须是不变的: 但p ...

最新文章

  1. matlab中读文件的行数_[转载]MATLAB中获取大型文本文件行数方法研究(转)
  2. 网络生成批量配置_GitHub Star 3.2K Java 图片缩略图生成库
  3. 在Linux虚拟机中添加多个ip地址
  4. spark sql uv_使用Spark Streaming SQL进行PV/UV统计
  5. Gzip,BZip2,Lzo,Snappy比较
  6. mysql 该字符串未被识别为有效的 datetime_打印报错,提示该字符串未被识别为有效的datetime...
  7. 怎么制止qq刷屏代码-vbs
  8. python内置函数bool()
  9. Class 类文件结构解析
  10. x570支持Linux系统吗,苹果中国官网调整:Mac Pro正式支持选配AMD W5500X显卡
  11. flappy bird java源码_Java实现Flappy Bird游戏源码
  12. Linux终端欢迎界面
  13. Unity 重要概念
  14. BUCTOJ Contest1001 - 邀请赛20180814 问题 F: Poker
  15. 1008 : 美元和人民币
  16. gige相机二次开发_GigE Vision接口摄像机及其应用
  17. Windows10下VirtualBox虚拟机的备份与迁移
  18. NOI Online 2020 Round3 滚粗记
  19. 杭州电子科技大学acm--2022
  20. Orace数据库将子集字符集转换为超集字符集操作方法,很详细

热门文章

  1. 通俗易懂——css长度单位:px、em、rem、vh、vw、in、...
  2. VSPD虚拟串口软件的一些使用说明
  3. PXI 1553B总线卡 航空总线卡 底板+功能子卡 架构 底板原理图+PCB 子卡原理图+PCB
  4. Smatch 最基础的应用
  5. 在一家信息安全公司工作是什么感受?
  6. 跨行入测绘,看航测小白如何实现纯免相控作业
  7. 关于微信小程序在部分PC设备无法打开的问题
  8. 阿里巴巴国际站询盘转化率
  9. CSS3边框、颜色、伪选择器
  10. 如何设置Mac电脑的DNS