一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功辩春能函数、数据接口声明的载体文件,主要用于保存程激配序的声明,而定义文件用于保存程序的实现 。
这里的set和find函数可明灶指以在头文件直接定义,即
include<set>
include<string>
C++ STL set和multiset的使用\x0d\x0a1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等 *** 作,就 像一个集合一样。所有的 *** 作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。\x0d\x0a创建 multiset base\x0d\x0a删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除\x0d\x0abase.count( a ):set能返回0或者1,multiset是有多少个返回多少念历个.\x0d\x0aSet和multiset都是引用头文件,复杂度都是logn\x0d\x0a2,Set中的元素可以是任意类型的,但是由于需要排序,所以元素必须有一个序,即大小的比较关系,比如 整数可以用<比较.\x0d\x0a3,自定义比较函数;\x0d\x0ainclude\x0d\x0atypedef struct\x0d\x0a{ 定义类型 }\x0d\x0ass(类型名)\x0d\x0astruct cmp\x0d\x0a{\x0d\x0abool operator()( const int &a, const int &b ) const\x0d\x0a{ 定义比较关系<}\x0d\x0a}\x0d\x0a(运算符重载,重载 base( 创建一个元素类型是ss,名字是base的set )\x0d\x0a注:定义了<,==和>以及>=,<=就都确定了,STL的比较关系都是用<来确定的,所以必须通 过定义< --“严格弱小于”来确定比较关\x0d\x0a4,set的基本 *** 作:\x0d\x0abegin() 返回指向第一个元素的迭代器\x0d\x0aclear() 清除所有元素\x0d\x0acount() 返回某个值元素的个数\x0d\x0aempty() 如果集合为空,返回true\x0d\x0aend() 返回指向最后一个元素的迭代器\x0d\x0aequal_range() 返回集合中与给定值相等的上下限的两个迭代器\x0d\x0aerase() 删除集合中的元素\x0d\x0afind() 返回一个指向被查找到元素的迭代器\x0d\x0aget_allocator() 返回集合的分配器\x0d\x0ainsert() 在集合中插入元素\x0d\x0alower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器\x0d\x0akey_comp() 返回一个用于元素间值比较的函数\x0d\x0amax_size() 返回集合能容纳的元素的最大限值\x0d\x0arbegin() 返回指向集合中最后一个元素的反向迭代仔敬搜器\x0d\x0arend() 返回指向集合中第一个元素的反向迭代器\x0d\x0asize() 集合中元素的数目稿拿\x0d\x0aswap() 交换两个集合变量\x0d\x0aupper_bound() 返回大于某个值元素的迭代器\x0d\x0avalue_comp() 返回一个用于比较元素间的值的函数\x0d\x0a5,自定义比较函数:\x0d\x0aFor example:\x0d\x0a#include\x0d\x0a#include\x0d\x0ausing namespace std\x0d\x0atypedef struct {\x0d\x0aint a,b\x0d\x0achar s\x0d\x0a}newtype\x0d\x0astruct compare //there is no ().\x0d\x0a{\x0d\x0abool operator()(const newtype &a, const newtype &b) const\x0d\x0a{\x0d\x0areturn a.selement\x0d\x0aint main()\x0d\x0a{\x0d\x0anewtype a,b,c,d,t\x0d\x0aa.a=1a.s='b'\x0d\x0ab.a=2b.s='c'\x0d\x0ac.a=4c.s='d'\x0d\x0ad.a=3d.s='a'\x0d\x0aelement.insert(a)\x0d\x0aelement.insert(b)\x0d\x0aelement.insert(c)\x0d\x0aelement.insert(d)\x0d\x0aset::iterator it\x0d\x0afor(it=element.begin()it!=element.end()it++)\x0d\x0acout\x0d\x0a#include \x0d\x0ausing namespace std\x0d\x0abool fncomp (int lhs, int rhs) {return lhs first// empty set of ints\x0d\x0aint myints[]= {10,20,30,40,50}\x0d\x0aset second (myints,myints+5)// pointers used as iterators\x0d\x0aset third (second)// a copy of second\x0d\x0aset fourth (second.begin(), second.end())// iterator ctor.\x0d\x0aset fifth// class as Compare\x0d\x0abool(*fn_pt)(int,int) = fncomp\x0d\x0aset sixth (fn_pt)// function pointer as Compare\x0d\x0areturn 0\x0d\x0a}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)