STL学习:set
来源:互联网 发布:智联招聘java简历模板 编辑:程序博客网 时间:2024/05/29 09:09
Set集合容器,是一种实现了平衡二叉树的数据结构,容器中的数据不能重复,即每个数据都是唯一的,而且容器中的数据页数不能直接修改的,因为修改后的数据很可能不在原来的数位上。Set容器的主要目的是快速检索数据元素,减速时采用中序遍历,可将容器内数据由小到大遍历处理。需要注意的是,关联容器的迭代器不支持it+n操作,仅支持it++。
Set容器的定义和使用方法如下:
(一)Set容器的定义:
set<类型> 对象名; 如:set<int> s;
set<类型,比较结构体> 对象名; 如:set<int,myComp> s; Set容器在插入时,默认情况下按从小到大的顺序存储,可以通过自定义比较结构体,按从大到小的顺序存储或者按照多个关键字序列插入。
(二)添加元素:
set<int> s;
s.insert(8);
s.insert(10);
s.insert(6);
s.insert(8); 重复元素不会插入
(三)遍历访问:
(1)顺序遍历:
set<int> s;
set<int>::iterator it;
for(it=s.begin();it!=s.end();s++)
*it;
(2)反序遍历:
set<int>::reverse_iterator it;
for(it=s.rbegin();it!=s.rend();s++)
*it;
(四)删除元素:
erase(迭代器)
erase(元素值)
erase(迭代器1,迭代器2)
clear(),清空容器,相当于删除所有的元素。
(五)查找元素:
find (元素),返回一个迭代器值。查找结果:找到了,返回指向该元素的迭代器;没找到,返回s.end();
(六)自定义比较函数:
(1)当set中存储的数据,需要按自定义的规则进行比较大小时;
(2)当set中存储的是自定义数据时,如结构体,类等。
第一种情况,元素类型不是结构体。
首先,定义比较结构体
struct myComp
{
bool operator() (const 类型 &a, const 类型 &b)
{
……return(a>b);
}
};
然后,定义set:
set<类型,myComp> s;
第二种情况,元素类型是结构体。
首先,在结构体中,增加“operator <”函数
struct 结构体
{
bool operator < (const 结构体类型 &a)
{
……return(…);
}
};
然后,定义set
set<类型> s;
- #include<iostream>
- #include<set>
- #include<string>
- using namespace std;
- typedef struct non
- {
- string name;
- float score;
- bool operator<(const non &a) const
- {
- return a.score<score;
- }
- } STU;
- int main()
- {
- set<STU> v;
- STU s;
- s.name="Jack";
- s.score=80.5;
- v.insert(s);
- s.name="Nacy";
- s.score=60.5;
- v.insert(s);
- s.name="Tomi";
- s.score=20;
- v.insert(s);
- set<STU>::iterator p;
- for(p=v.begin(); p!=v.end(); p++)
- {
- cout<<(*p).name<<" : "<<(*p).score<<endl;
- }
- return 0;
- }
- 输出结果:
- Jack : 80.5
- Nacy : 60.5
- Tomi : 20
#include <cstdio>#include <iostream>#include <algorithm>#include <set>#include <string>using namespace std;int main (){set<int>a;a.insert(1);a.insert(2);a.insert(4);a.insert(3);cout<<a.size()<<endl;set<int>::iterator i,j;int k=0;for(k=0,i=a.end();k<a.size();k++){cout<<*(--i)<<endl;}for(i=a.begin();i!=a.end();i++){cout<<*i<<endl;}a.clear();a.insert(1);a.insert(3);i=a.find(3);a.insert(1);a.insert(3);//cout<<i-a.begin()<<endl; a.erase(3);cout<<a.count(3)<<endl;if(*a.find(2)==2)cout<<'-'<<endl;return 0;}
- STL学习之set
- STL学习--set
- STL学习:set
- stl学习—set
- STL学习之set容器
- STL set、multiset 学习笔记
- STL学习之set容器
- C++ STL Set 学习报告
- C++ STL set 学习笔记
- C++ STL 学习笔记 set
- C++ STL set map 学习
- STL中的set学习笔记
- STL set相关学习笔记
- STL学习(二)set容器学习
- C++ STL学习笔记七 set容器
- c++ STL set和multiset 学习笔记
- 【C++ STL学习之七】set用法
- 【日常学习】【语法】STL之set
- CentOS各种配置步骤与所涉及Linux命令
- 网络流学习记录
- batch 批处理
- Lua与C/C++的交互
- 对称的二叉树(二叉树的镜像操作)
- STL学习:set
- 2016年--放空的日子
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- Cygwin下安装Kaldi
- Leetcode-445. Add Two Numbers II
- c++自制小游戏(1st)开始
- js数据类型
- 统计学1
- Unable to locate data in executable file