STL之set具体解释(二)
首先来看看set集合容器:
set集合容器实现了红黑树的平衡二叉树数据结构。在插入元素时它会自己主动调整二叉树的排列,把该元素放到适当的位置,而且
保证左右子树平衡。平衡二叉检索树採用中序遍历算法。
对于set,vector,map等等,它们的前向迭代器定义是这种(以set为例):
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++){}
那么反向迭代器呢?
set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++){}
经常用法:insert(),erase(),find(),clear()
find()方法是查找元素方法。假设找到就返回该元素迭代器的位置,否则就返回最后一个元素后面的一个位置。
这样来使用:
it=s.find(5);
if(it!=s.end()) {}
else {}
关于比較函数:
假设元素不是结构体。而是基本数据类型,那么就自定义一个比較函数:
- struct cmp
- {
- bool operator()(const int &a,const int &b)
- {
- return a>b;
- }
- };
- int main()
- {
- set<int,cmp> s;
- for(int i=1;i<10;i++)
- s.insert(i);
- set<int,cmp>::iterator it;
- for(it=s.begin();it!=s.end();it++)
- cout<<*it<<" ";
- return 0;
- }
假设元素是结构体,那么比較函数直接能够写在结构体里面。
- struct Student
- {
- string name;
- double score;
- bool operator < (const Student &a) const
- {
- return a.score<score;
- }
- };
- set<Student> s;
对于set容器来说。它不能有keyword同样的元素同一时候存在,假设要保留同样的元素,就用multiset多重集合容器。
其基本操作跟set集合容器几乎相同一样。定义方法是:multiset<string> ms;
map映照容器:
map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一相应关系。
map也是用红黑树实现
的。
同set一样,map不同意插入元素键值同样,而multimap多重应照集合能够同意键值反复。
用法:
- int main()
- {
- map<string,double> m;
- m["Jack"]=98.0;
- map<string,double>::iterator it;
- for(it=m.begin();it!=m.end();it++)
- cout<<(*it).first<<" "<<(*it).second<<endl;
- return 0;
- }
主要方法有:insert(),clear(),erase(),find()等等,基本跟set一样。对于multimap用法跟map几乎相同一样。
std::pair基本的作用是将两个数据组合成一个数据,两个数据能够是同一类型或者不同类型。
比如 std::pair<int,float> 或者 std::pair<double,double>等。
pair实质上是一个结构体。其基本的两个成员变量
是first和second。这两个变量能够直接使用。
初始化一个pair能够使用构造函数,也能够使用std::make_pair函数。
make_pair函数的定义例如以下:
- template pair make_pair(T1 a, T2 b)
- {
- return pair(a, b);
- }
所以m.insert(pair<string,double>("Luce",88.5));
与 m.insert(make_pair("Luce",88.5)); 是相同的效果。
演示样例:
- int main()
- {
- typedef pair<string,double> lesson;
- typedef multimap<string,lesson> stu;
- stu a;
- a.insert(make_pair("Jack",lesson("math",90.5)));
- a.insert(make_pair("Jack",lesson("history",85.5)));
- a.insert(make_pair("Luce",lesson("math",99.0)));
- map<string,lesson>::iterator it;
- for(it=a.begin();it!=a.end();it++)
- cout<<(*it).first<<" "<<(*it).second.first<<" "<<(*it).second.second<<endl;
- return 0;
- }
STL之set具体解释(二)的更多相关文章
- Android 布局学习之——Layout(布局)具体解释二(常见布局和布局參数)
[Android布局学习系列] 1.Android 布局学习之--Layout(布局)具体解释一 2.Android 布局学习之--Layout(布局)具体解释二(常见布局和布局參数) ...
- {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用
MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...
- openssl之EVP系列之5---EVP_Encrypt系列函数具体解释(二)
openssl之EVP系列之5---EVP_Encrypt系列函数详细解释(二) ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.t ...
- C++ STL它vector详细解释
Vectors vector它是C++标准模板库部分,它是一种多用途,你可以使用各种数据结构和算法的模板类和库. vector其原因被认为是一个容器.因为它可以被存储为各种类型的对象作为容器.一 ...
- Kafka具体解释二、怎样配置Kafka集群
Kafka集群配置比較简单,为了更好的让大家理解.在这里要分别介绍以下三种配置 单节点:一个broker的集群 单节点:多个broker的集群 多节点:多broker集群 一.单节点单broker实例 ...
- stl非变易算法(二)
这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...
- 用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)
本文由 Justme0翻译自 Code Project 转载请参见文章末尾处的要求. 介绍 众所周知,要建一棵树,我们需要关注它的内存分配与释放.为了避开这个问题,我打算用C++ STL(vector ...
- cocos2dx 解释二具体的启动过程:内存管理和回调
在上一篇的第二部分中.我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -... //tick before ...
- logistic回归具体解释(二):损失函数(cost function)具体解释
有监督学习 机器学习分为有监督学习,无监督学习,半监督学习.强化学习.对于逻辑回归来说,就是一种典型的有监督学习. 既然是有监督学习,训练集自然能够用例如以下方式表述: {(x1,y1),(x2,y2 ...
随机推荐
- DS博客作业06—图
1.本周学习总结 1.1思维导图 1.2学习体会 2.PTA实验作业 2.1 图着色问题 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色, ...
- 集合篇 —— Collection(1):JDK 中的重复实现问题
1. 问题的提出 在 Java 的集合体系当中,无论是 List(列表)还是 Set(集),在设计的时候都存在一个很奇怪的现象:这两种集合的接口,Java 都为其设计了抽象类 Abstrac ...
- Linux Programming之MySQL
实验环境:Ubuntu13.04 在此之前有过一段使用MySQL数据库的经历,在Windows平台下使用GUI(当时是使用HeidiSQL和Workbench来管理数据库),并且有过使用Python中 ...
- 扩展kmp--模板解析
扩展kmp: 用于求串的各个后缀与原串的最长公共前缀的长度: 上图的是字符串自匹配的过程: 图一: 假设现在匹配到i-1了,开始求next [ i ] 的值,此时,k记录的是到目前为止匹配到的最远的位 ...
- bzoj3924 [Zjoi2015]幻想乡战略游戏 点分树,动态点分
[BZOJ3924][Zjoi2015]幻想乡战略游戏 Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网 ...
- 【CF1029A】Many Equal Substrings(模拟)
题意:给定一个长度为n的串s,要求构造一个长度最小的使s出现了k次的串,可以重叠 n<=50,k<=50 思路:计算一下前后缀相同长度 #include<cstdio> #in ...
- 【NOIP2016】换教室(DP,期望)
题意: 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课程 ...
- MySQL完全备份脚本:数据+二进制日志+备份日志
一. 脚本须知 1.mysql数据文件和二进制日志文件最好保存在不同的分区或存储设备上 2.备份完成后注意修改数据的权限以防止泄露重要信息,哪些主机哪些用户可以用来恢复 3. 查看导出的2进制日志文件 ...
- py2exe多文件转换
# -*- coding: utf-8 -*- #import distutils #import py2exe #from distutils.core import setup #distutil ...
- js-压缩混淆工具 uglifyjs
单个打包文件npm install uglify-js -g 使用uglifyjs压缩js uglifyjs 原始js文件 -m -c -o 压缩后js文件 uglifyjs 原始js文件 -b -c ...