SET的一些知识点
来源:互联网 发布:d3.js官网 编辑:程序博客网 时间:2024/06/15 00:55
这两天学习了STL,准备找几道题练练手,在这个过程中,总结了一些小的知识点。
1、set集合容器实现了红黑树的二叉检索树的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值。
2、平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、list容器。将键值由小到大遍历出来,并且不会重复插入相同键值的元素,采取忽略处理。如果是一个结构体其中有三个int型元素a,b,c,如果有插入的a相同,则这组数据被忽略,如插入1 2 3、1 2 4、1 3 4;则只会插入1 2 3,因为首元素相同,所以采取忽略处理。而除首元素其他元素相同则可以插入。
3、iterator迭代器的作用是遍历容器。
4、在5下面有以下知识点的练习。
创建元素:set<int>s,需要说明元素的类型;
元素的插入:s.insert(需要插入的元素),如:s.insert(8),插入元素8;
中序遍历:set<int> :: iterator it;
for( it=s.begin() ; it !=s.end();it++)
{
cout<<*it<<" ";
}
反向遍历:set<int> :: reverse_iterator it;
for( it=s.rbegin() ; it !=s.rend();it++)
{
cout<<*it<<" ";
元素的删除:s.erase(6); 删除键值为6的元素;
元素的查找:set<int>::iterator it;
it=s.find(6);
if (it != s.end() )
cout<<“找到该元素”;
5、自定义比较元素:
1> 不是结构体的元素、按键值由大到小:
#include<set>#include<iostream>using namespace std;//自定义比较函数mycomp,重载"()"操作符struct mycomp{ bool operator ()(const int &a,const int &b) { return a>b; }};int main(){ //定义元素类型为int型的集合对象s,当前没有任何元素 //采用的比较函数是mycomp set<int,mycomp>s; //插入5个元素,由于8有重复,所以第二次的8并没有执行 s.insert(8); s.insert(1); s.insert(12); s.insert(6); s.insert(8);//第二次插入8,重复元素,不会插入 set<int,mycomp>::iterator it; for(it=s.begin();it!=s.end();it++) cout<<*it<<" "; cout<<endl; return 0;}
运行结果:
12 8 6 1
2>如果元素是结构体,那么直接可以把比较函数写在结构体内。下面的程序说明了如何操作:
#include<set>#include<iostream>using namespace std;struct INFO{ string name; float score; bool operator < (const INFO &a) const { return a.score<score; }};int main(){ //定义元素类型为INFO结构体的集合对象s,当前没有任何元素 set<INFO>s; INFO info; info.name="Jack"; info.score=80.5; s.insert(info); info.name="Tomi"; info.score=20.5; s.insert(info); info.name="Nacy"; info.score=60.5; s.insert(info); set<INFO>::iterator it; for(it=s.begin();it!=s.end();it++) { cout<<(*it).name<<":"<<(*it).score<<endl; } return 0;}
运行结果:
Jack:80.5
Nacy:60.5
Tomi:20.5
- SET的一些知识点
- Hibernate的一些知识点
- c#的一些知识点
- sim300的一些知识点
- GDI的一些知识点
- IFRAME的一些知识点
- PHP的一些知识点
- python 的一些知识点
- 一些常用的知识点
- 静态的一些知识点
- django的一些知识点
- Jquery的一些知识点
- ios的一些知识点
- ios的一些知识点
- ios的一些知识点
- ios的一些知识点
- CGI的一些知识点
- ios的一些知识点
- HDU 1010 Tempter of the Bone
- dbms_profiler 调整PL/SQL的性能
- 《高效程序员的45个习惯——敏捷开发修炼之道》读书总结
- 银行应对互联网金融
- ccsm ubuntu 特效软件使用记录
- SET的一些知识点
- Leetcode Palindrome Partitioning
- 使用安全令牌保护 RTMP 流
- uva10806 - Dijkstra, Dijkstra. 最小费用流 求两条路权值之和最小
- 高斯日记
- bootstrap modal使用方法
- Oracle11g性能调优--使用SQL Plan Management(1)
- VS2012和SQL Server2008的兼容问题
- axurerp