首先来看看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            {}

关于比較函数:

假设元素不是结构体。而是基本数据类型,那么就自定义一个比較函数:

  1. struct cmp
  2. {
  3. bool operator()(const int &a,const int &b)
  4. {
  5. return a>b;
  6. }
  7. };
  8. int main()
  9. {
  10. set<int,cmp> s;
  11. for(int i=1;i<10;i++)
  12. s.insert(i);
  13. set<int,cmp>::iterator it;
  14. for(it=s.begin();it!=s.end();it++)
  15. cout<<*it<<" ";
  16. return 0;
  17. }

假设元素是结构体,那么比較函数直接能够写在结构体里面。

  1. struct Student
  2. {
  3. string name;
  4. double score;
  5. bool operator < (const Student &a) const
  6. {
  7. return a.score<score;
  8. }
  9. };
  10. set<Student> s;

对于set容器来说。它不能有keyword同样的元素同一时候存在,假设要保留同样的元素,就用multiset多重集合容器。

其基本操作跟set集合容器几乎相同一样。定义方法是:multiset<string> ms;

map映照容器:

map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一相应关系。

map也是用红黑树实现

的。

同set一样,map不同意插入元素键值同样,而multimap多重应照集合能够同意键值反复。

用法:

  1. int main()
  2. {
  3. map<string,double> m;
  4. m["Jack"]=98.0;
  5. map<string,double>::iterator it;
  6. for(it=m.begin();it!=m.end();it++)
  7. cout<<(*it).first<<" "<<(*it).second<<endl;
  8. return 0;
  9. }

主要方法有: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函数的定义例如以下:

  1. template pair make_pair(T1 a, T2 b)
  2. {
  3. return pair(a, b);
  4. }

所以m.insert(pair<string,double>("Luce",88.5));

与 m.insert(make_pair("Luce",88.5)); 是相同的效果。

 

演示样例:

  1. int main()
  2. {
  3. typedef pair<string,double> lesson;
  4. typedef multimap<string,lesson> stu;
  5. stu a;
  6. a.insert(make_pair("Jack",lesson("math",90.5)));
  7. a.insert(make_pair("Jack",lesson("history",85.5)));
  8. a.insert(make_pair("Luce",lesson("math",99.0)));
  9. map<string,lesson>::iterator it;
  10. for(it=a.begin();it!=a.end();it++)
  11. cout<<(*it).first<<" "<<(*it).second.first<<" "<<(*it).second.second<<endl;
  12. return 0;
  13. }

STL之set具体解释(二)的更多相关文章

  1. Android 布局学习之——Layout(布局)具体解释二(常见布局和布局參数)

     [Android布局学习系列]   1.Android 布局学习之--Layout(布局)具体解释一   2.Android 布局学习之--Layout(布局)具体解释二(常见布局和布局參数)   ...

  2. {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用

    MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...

  3. openssl之EVP系列之5---EVP_Encrypt系列函数具体解释(二)

    openssl之EVP系列之5---EVP_Encrypt系列函数详细解释(二)    ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.t ...

  4. C++ STL它vector详细解释

    Vectors    vector它是C++标准模板库部分,它是一种多用途,你可以使用各种数据结构和算法的模板类和库. vector其原因被认为是一个容器.因为它可以被存储为各种类型的对象作为容器.一 ...

  5. Kafka具体解释二、怎样配置Kafka集群

    Kafka集群配置比較简单,为了更好的让大家理解.在这里要分别介绍以下三种配置 单节点:一个broker的集群 单节点:多个broker的集群 多节点:多broker集群 一.单节点单broker实例 ...

  6. stl非变易算法(二)

    这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...

  7. 用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)

    本文由 Justme0翻译自 Code Project 转载请参见文章末尾处的要求. 介绍 众所周知,要建一棵树,我们需要关注它的内存分配与释放.为了避开这个问题,我打算用C++ STL(vector ...

  8. cocos2dx 解释二具体的启动过程:内存管理和回调

    在上一篇的第二部分中.我们有一句代码待解释的: // Draw the Scene void CCDirector::drawScene(void) { -...     //tick before ...

  9. logistic回归具体解释(二):损失函数(cost function)具体解释

    有监督学习 机器学习分为有监督学习,无监督学习,半监督学习.强化学习.对于逻辑回归来说,就是一种典型的有监督学习. 既然是有监督学习,训练集自然能够用例如以下方式表述: {(x1,y1),(x2,y2 ...

随机推荐

  1. javascript学习笔记 - 引用类型 Function

    五 Function类型 每个函数都时Function类型的实例.函数也是对象. 声明函数: function func_name () {} //javascript解析器会在程序执行时率先读取函数 ...

  2. STL之set容器的总结

    最近做了很多题型,都是用简单的STL就解决了,深刻的感觉到STL的伟大力量,但是本人在遇到问题的时候还是喜欢用常规的算法去解决问题,脑袋笨没办法,有时候根本想不到用STL去解决一些问题 往往都是砍了网 ...

  3. 九度oj 题目1457:非常可乐

    题目描述: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样 ...

  4. 将模型储存到本地-FastCoder

    // // ViewController.m // 模型转data储存 // // Created by 谭启宏 on 16/3/4. // Copyright © 2016年 tqh. All ri ...

  5. 【Luogu】P1411树(树形高精DP)

    题目链接 我貌似又做了一道高精题呢(笑) 这题的DP方程很好想,设f[i][j]表示i为根的子树,i所在联通块大小为j的最大值,然后乱搞 但是要高精,那么搞是得要高精除的 所以考虑f[i][j]是除以 ...

  6. 模拟select框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 使用grunt实现自动化单元测试

    闲话不多说~ 使用步骤 1.安装插件 npm install grunt-contrib-qunit --save-dev 2.加载包含 "qunit" 任务的插件 grunt.l ...

  8. Java设计模式(Design Patterns)——可复用面向对象软件的基础

    设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了可重用代码.让代码更容易被他 ...

  9. 【前端学习笔记】2015-09-01 附 split()方法、readyState

    1.split():作用对象是一个字符串或者字符串对象,会要求设置两个参数(分割点(separator),分割出来的数量(number)),ps:1."2:3:4:5".split ...

  10. scrapy之download middleware

    官方文档:https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 一 write your own downloader ...