STL初步用法
来源:互联网 发布:面包车拉货软件 编辑:程序博客网 时间:2024/06/05 11:00
STL初步用法
STL: (Standard Template Library) 标准模板库,它包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组、链表、字典等。使用方便,效率较高。要使用其中的算法,需要
#include <algorithm>
sort()
用法1:对基本类型的数组从小到大排序:
sort(数组名+n1,数组名+n2) ;
用法2对元素类型为T的基本类型数组从大到小排序:
sort(数组名+n1,数组名+n2,greater<T>()) ;
用法3用自定义的排序规则,对任何类型T的数组排序:
sort(数组名+n1,数组名+n2,排序规则结构名());
排序规则结构的定义方式:
struct 结构名{bool operator()( const T & a1,const T & a2) {//若a1应该在a2前面,则返回true。//否则返回false。}};
用法示例
#include <iostream>#include<cstring>#include<algorithm>using namespace std;struct Student{ char name[20]; int id; double gpa;};Student students[]={{"Jack",112,3.4},{"Mary",102,3.8},{"Mary",117,3.9},{"Ala",333,3.5},{"Zero",101,4.0}};struct StudentRule1{ bool operator() (const Student &s1,const Student &s2) { if(stricmp(s1.name,s2.name)<0) return true; return false; }};void PrintStudents(Student *s,int n){ for (int i=0;i<n;i++) { cout << "(" << s[i].name << ","<< s[i].id <<"," << s[i].gpa << ") " ; }}int main(){ int n = sizeof(students) / sizeof(Student); sort(students,students+n,StudentRule1()); //按姓名从小到大排 PrintStudents(students,n); return 0;}
二分查找算法
binary_search:在从小到大排好序的基本类型数组上进行二分查找
lower_bound在对元素类型为T的从小到大排好序的基本类型的数组中进行查找
upper_bound
注:在使用时,需要确保数组已经排序完毕
binary_search
在用自定义排序规则排好序的、元素为任意的T类型的数组中进行二分查找,返回值为true(找到)或false(没找到)
binary_search(数组名+n1,数组名+n2,值,排序规则结构名());
查找时的排序规则,必须和排序时的规则一致!
“等于”的含义: a 等于 b <=> “a必须在b前面”和”b必须在a前面”都不成立
#include <iostream>#include<cstring>#include<algorithm>struct Rule1//按照个位数字从小到大排序{ bool operator()(const int &a1,const int &a2) { return a1%10<a2%10; }};void Print(int a[],int s){ for (int i=0;i<s;i++) { cout <<a[i]<<","; } cout <<endl;}int main(){ int a[] ={12,45,3,98,21,7}; sort(a,a+6); Print(a,6); cout<<"result:"<<binary_search(a,a+6,45)<<endl; cout<<"result:"<<binary_search(a,a+6,77)<<endl; sort(a,a+6,Rule1());//按照个位数排序 Print(a,6); cout<<"result:"<<binary_search(a,a+6,7)<<endl;//由于没按照从小到大排序,结果没意义 cout<<"result:"<<binary_search(a,a+6,8,Rule1())<<endl; return 0;}
输出:
3,7,12,21,45,98,result:1result:021,12,3,45,7,98,result:0result:1
lower_bound
在对元素类型为T的从小到大排好序的基本类型的数组中进行查找
T * lower_bound(数组名+n1,数组名+n2,值,排序规则结构名());
返回一个指针 T * p;
*p 是查找区间里下标最小的,按自定义排序规则, 可以排在”值”后面的元素。如果找
不到, p指向下标为n2的元素
upper_bound
用法与lower_bound 类似
平衡二叉树数据结构
用于对大量数据进行增加、删除操作的同时,进行数据查找,保证这些操作都可以在log(n)的复杂度内完成。
multiset
set
mutimap
map
使用前
#include <set>
multiset
multiset<T> st;
定义multiset变量st,默认按照升序的方式存储T类型的变量
迭代器
multiset<T>::iterator p;
p是迭代器,作用类似于指针,需要通过迭代器才能访问迭代器才能访问multiset中的元素,它指向mutliset中的元素。
multiset上的迭代器可 ++ , –, 用 != 和 == 比较,不可比大小,不可加减整数,不可相减
st.insert//插入数据,返回值类型为 multiset<T>::iterator,是指向st中的头一个元素的迭代器st.find//查找数据,返回值类型为 multiset<T>::iterator,是指向st中的最后一个元素后面的迭代器st.erase//删除数据
set
set和multiset的区别在于容器里不能有重复元素
a和b重复 表示: “a必须排在b前面” 和“b必须排在a前面”都不成立
pair模板
pair<T1,T2>类型等价于:struct { T1 first; T2 second;};
pair<set<int>::iterator, bool> result = st.insert(2);if( ! result.second ) //条件成立说明插入不成功
- STL初步用法
- 初步使用STL
- vector--初步学习STL
- list--初步学习STL
- queue--初步学习STL
- map--初步学习STL
- 初步代码转换STL
- STL 函数初步
- 第一节 STL入门初步
- 5.2 STL初步
- stl 初步了解
- STL容器 初步简介
- STL初步:大理石在哪儿?
- STL用法
- STL用法
- STL用法
- STL初步--排序与检索
- STL初步-见识一下sort函数
- Python数据分析笔记
- openCV鼠标事件实例
- HotSpot虚拟机中对象的创建
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- 编写一个递归方法,返回数N的二进制表示中1的个数
- STL初步用法
- wordpress获取各类页面链接的函数总结
- 面向对象——继承
- 牛客网--蘑菇阵
- HTML+CSS相对宽度和绝对宽度冲突时的div解决方法
- c#前台线程与后台线程的区别和联系
- 机器学习性能评估指标---准确率(Accuracy), 精确率(Precision), 召回率(Recall)
- Stanford-CV华人教授李飞飞写给她学生的一封信,如何做好研究以及写好PAPER
- JavaScript学习(三)