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 ...
随机推荐
- asp.net的Context.Cache缓存过期策略
最近使用Context.Cache需要了解Cache的缓存过期策略. 文章:ASP.NET缓存中Cache过期的三种策略
- hihoCoder #1349 Nature Numbers
题目大意 考虑自然数构成的序列 $a$:$01234567891011\dots$,序列下标从 $0$ 开始,即 $a_0 =0, a_1 = 1$ . 求 $a_n$($0\le n\le 10^{ ...
- [CODEVS1916] 负载平衡问题(最小费用最大流)
传送门 输入所有 a[i],求出平均值 sum,每个 a[i] -= sum 那么如果 a[i] > 0,从 s 向 i 连一条容量为 a[i] 费用为 0 的有向边 如果 a[i] < ...
- DataSet用法一:添加代码创建的表DataTable,设置主键外键,读取及修改DataSet表中数据
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- mybatis动态sql片段与分页,排序,传参的使用与一对多映射与resultMap使用
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- size_t、ptrdiff_t【转】
转自:http://www.cnblogs.com/liulipeng/archive/2012/10/08/2715246.html http://longzxr.blog.sohu.com/196 ...
- 15深入理解C指针之---内存释放
一.手动申请的内存,必须及时进行内存释放,否则容易造成内存泄露.主要代码形式为: #include <stdio.h> #include <stdlib.h> int main ...
- Vbat 1.8V,接充電器,GPIO_CHG_EN pin 竟然是 high!
Schematic : Precondition : Vbat 1.8V Plugin adapter Preloader doesn't enable GPIO_CHG_EN Origin : 做個 ...
- Django的日志中关闭elasticsearch模块的日志
今天用python的日志模块,为Django项目配置了日志,运行的时候发现日志在疯狂的涨,检查后发现竟然是elasticsearch的日志,但是我没有打这个日志啊,根据日志提供的文件位置,我在elas ...
- React-Native解决ListView 在Android手机上无吸顶效果
stickySectionHeadersEnabled={true} stickyHeaderIndices={[0]}