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 ...
随机推荐
- hdoj--1016<dfs>
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 题目描述:1-n的整数排成一个环,首尾相连,相邻的两个数相加是素数,输出满足的排列,1开头输出, ...
- Codeforces 891 C Envy
题目大意 给定一个 $n$ 个点 $m$ 条边的连通的无向图,每条边有一个权值,可能有重边.给出 $q$ 组询问,一组询问给出 $k$ 条边,问是否存在一棵最小生成树包含这 $k$ 条边. 思路 这道 ...
- HDU——1874畅通工程续(Dijkstra与SPFA)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- 通过rabbitmqadmin管理rabbitmq
# 安装rabbitmq $ sudo apt install rabbitmq-server # 下载rabbitmqadmin管理工具 sudo rabbitmq-plugins enable r ...
- SPOJ CIRU The area of the union of circles
You are given N circles and expected to calculate the area of the union of the circles ! Input The f ...
- 洛谷 P1131 选择客栈
题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...
- 【CF713C】Sonya and Problem Wihtout a Legend(离散化,DP)
题意:给你一个数列,对于每个数字你都可以++或者−− 然后花费就是你修改后和原数字的差值,然后问你修改成一个严格递增的,最小花费 思路:很久以前做过一道一模一样的 严格递增很难处理,就转化为非严格递增 ...
- CSS实现Footer固定底部,超过一屏自动撑开
方法一:给html.body都设置100%的高度,确定body下内容设置min-height有效,然后设置主体部分min-height为100%,此时若没有header.footer则刚好完美占满全屏 ...
- cmake使用(CMakeList.txt)
set(CMAKE_INCLUDE_CURRENT_DIR ON)#CMAKE_INCLUDE_CURRENT_DIR equal to INCLUDE_DIRECTORY(${CMAKE_CURRE ...
- VMWare上Linux系统下载安装教程
原文链接:http://www.studyshare.cn/blog-front//software/details/1162/0 一.下载 linux镜像文件下载,此处只提供CentOS 6.8版本 ...