stl之List 、priority_queue、set:仿函数,pair查返回值、multiset

list 不能随机访问 即其迭代器  it不能跨度不能大于1.   只能it++ it--等

list <int> l1 ;  可用 push_back  push_front ....

插入元素    l1.insert(pos , var )   pos位置变成var .

删除元素   l1.clear() ; 清除所有元素。  l1.erase(beg , end)  删除从beg到end区间(左闭右开)的数据,不包括end上,

l1.erase(it)  ;   删除位置上的值,  l1.remove(elem) , 删除l1上所有为elem的元素。

    

priority_queue  可用  p1.push()  p1.pop()   p1.top()

priority_queue<int> p1; 默认是最大值优先级队列。 即存的时候最大的值存队头。   

priority_queue<int,vector<int>,less<int>> s2 ;  最大值优先级队列

priority_queue<int,vector<int>,greater<int>> s1 ;  定义迭代器也这么定义

   


set 容器里元素唯一即不允许出现相同的元素,其默认按照从小到大排序。不能随意插入。可用v1.insert()

set<int , less<int> >   v1 ;          从小到大插入。这样定义时,迭代器也要定义成同样形式。

set<int , greater<int> >   v1 ;  

set<int , less<int> > ::iterator  it = v1.begin(); ......

基本数据类型时是可以排序的。但当是自定义数据类型时必须定义仿函数。如下:

struct StuFunction
{
bool operator() (const Stu & lef , const Stu & rig) {
if( lef.age < rig.age)
{
return true ;
}
else{
return false ;
}
}

};

set<Stu,StuFunction> s1 ;  在定义set对象和相应的迭代器时也需要调仿函数。

        set<Stu,StuFunction>::iterator it

追踪set.insert的返回值。 pair< set<Stu,StuFunction>::iterator , bool >  pair1 = s1.insert(s1) ;

pair1.second == true  , 则插入成功

/* 
set的查找
   set.find(elem)  //查找elem元素,返回指向elem元素的迭代器。
   set.count(elem) //返回容器中值为elem的元素个数对set来说,为0或1,对multiset来说可能大于1
   set.lower_bound(elem)  //返回第一个大于等于 elem元素的迭代器。
   set.upper_bound(elem)  //返回第一个大于elem元素的迭代器。
   set.equal_range(elem)  //返回容器中与elem相等的上下限的两个迭代器。上限是闭区间,下限开区间。 
*/

pair< set<int>::iterator , set<int>::iterator >  pair1 = s1.equal_range(elem) ; 第一个参数是上限的迭代器,第二个时下限的迭代器

multiset与set基本一致,不同的是set只有一个键值,而multiset可以有多个。 


猜你喜欢

转载自blog.csdn.net/u013565071/article/details/79508138