C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp
本小节主要讲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相关推荐
- C++PrimerPlus(第6版)中文版:Chapter16.1string类_16.3hangman.cpp
这是一个历史悠久的小游戏,早在维多利亚时代就已流行起来,规则简单且有趣,在7步之内猜出单词,否则小人将会"上吊". Hangman直译为"上吊的人",是一个猜单 ...
- 《C++ Primer 第5版》-11.1使用关联容器-康奈尔笔记
引入:2018年10月看<C++ Primer 第5版>而写的简单笔记 使用关联容器 使用map 使用set Map set 关联容器 Map头文件 Set头文件 Multimap头文件 ...
- C++PrimerPlus(第6版)中文版:Chapter8.2.4_Example8.6strc_ref.cpp
引用非常适合于结构和类,下面的例子就演示了这一点. // Chapter8.2.4_Example8.6strc_ref.cpp.cpp : 此文件包含 "main" 函数.程序执 ...
- WCF服务编程(4):《WCF服务编程》第3版中文版翻译结束,即将出版
原文地址: <WCF服务编程>第4版本翻译完毕!2016年底应该出版 [置顶]↑ WCF服务编程(4):<WCF服务编程>第3版中文版翻译结束,即将出版 ↑ 作为世界范围内最经 ...
- python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf
作 者 :(美)比斯利,(美)琼斯著 出版发行 : 北京:人民邮电出版社 , 2015.05 ISBN号 :978-7-115-37959-7 页 数 : 684 原书定价 : 108.00 开本 : ...
- C++Primer Plus第6版C Primer Plus第6版 中文版免费分享啦
最近在学习C++,用的资料是师兄分享的经典书籍<C++Primer Plus第6版中文版>的PDF,自带书签,使用很方便.但师兄说这个是他在网上花了积分才下载下来的,这让我很是吃惊,因为作 ...
- python学习手册-Python学习手册(第4版) 中文版.pdf
您所在位置:网站首页 > 海量文档  > 计算机 > Python Python学习手册(第4版) 中文版.pdf11 ...
- 《C++ Primer中文版(第五版)》 第九章 顺序容器
<C++ Primer中文版(第五版)> 第九章 顺序容器 元素在顺序容器中的顺序与其加入容器时的位置相对应.关联容器中元素的位置由元素相关联的关键字值决定. 所有容器都共享公共的接口,不 ...
- C Primer Plus(第5版)中文版
1. 在声明一个简单变量和数组时使用关键字const很简单.指针则要复杂一些,因为不得不把让指针本身成为const与让指针指向的值成为const区分开来.下面的声明表明pf指向的值必须是不变的: 但p ...
最新文章
- matlab中读文件的行数_[转载]MATLAB中获取大型文本文件行数方法研究(转)
- 网络生成批量配置_GitHub Star 3.2K Java 图片缩略图生成库
- 在Linux虚拟机中添加多个ip地址
- spark sql uv_使用Spark Streaming SQL进行PV/UV统计
- Gzip,BZip2,Lzo,Snappy比较
- mysql 该字符串未被识别为有效的 datetime_打印报错,提示该字符串未被识别为有效的datetime...
- 怎么制止qq刷屏代码-vbs
- python内置函数bool()
- Class 类文件结构解析
- x570支持Linux系统吗,苹果中国官网调整:Mac Pro正式支持选配AMD W5500X显卡
- flappy bird java源码_Java实现Flappy Bird游戏源码
- Linux终端欢迎界面
- Unity 重要概念
- BUCTOJ Contest1001 - 邀请赛20180814 问题 F: Poker
- 1008 : 美元和人民币
- gige相机二次开发_GigE Vision接口摄像机及其应用
- Windows10下VirtualBox虚拟机的备份与迁移
- NOI Online 2020 Round3 滚粗记
- 杭州电子科技大学acm--2022
- Orace数据库将子集字符集转换为超集字符集操作方法,很详细