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可以有多个。