博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL之set具体解释(二)
阅读量:6642 次
发布时间:2019-06-25

本文共 2129 字,大约阅读时间需要 7 分钟。

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

 

 

 

关于比較函数:

 

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

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

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

[cpp] 
  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.   
  11. set<Student> s;  

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

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

 

 

 

map映照容器:

 

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

map也是用红黑树实现

的。

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

 

用法:

[cpp] 
  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函数的定义例如以下:

[cpp] 
  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)); 是相同的效果。

 

演示样例:

[cpp] 
  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. }  

转载地址:http://gkovo.baihongyu.com/

你可能感兴趣的文章
运行shell脚本的三种方式
查看>>
Java I/O总结
查看>>
学习笔记之scikit-learn
查看>>
用java集合模拟登录和注册功能
查看>>
安装CPqD/ofdissector遭遇的错误
查看>>
C++ 顺序容器
查看>>
Linux下安装ElasticSearch 5 和配置外部访问
查看>>
微信授权登录
查看>>
去除多余样式
查看>>
NuGet Package Explorer使用教程下载
查看>>
还有5个月就NOIP2019了,我干了什么
查看>>
(转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)
查看>>
hdu2707
查看>>
oralce 常用sql
查看>>
POJ 2117 (割点+连通分量)
查看>>
计算树形节点间的距离
查看>>
使用 dep 配置 golang 开发环境
查看>>
处理器管理与进程管理
查看>>
质量属性常见的六个属性场景(以淘宝网为例)
查看>>
从B树、B+树、B*树谈到R 树
查看>>