关联容器(set,multiset)
1. 关联容器
- 内部元素有序排列,查找速度快
- 除和顺序容器共有的成员函数外,还支持以下成员函数:
find: 查找等于某个元素的值(x<y&&x>y同时为false)
lower_bound: 查找某个下界
upper_bound: 查找某个上界
**equal_range:**同时查找上界和下界
count: 计算等于某个值的元素个数
insert: 用于插入一个元素和一个区间
2.set/multiset
set和multiset的差别仅在于,set不允许有重复元素,multiset允许。
- 示例
#include <iostream>
#include <set>
using namespace std;
template<class T>
void print(T first, T last){
for(;first!=last;++first) cout<<*first<<" ";
cout<<endl;
}
int main()
{
typedef set<int>::iterator IT;
int a[5] = {4,6,1,3,2};
set<int> b(a,a+5);
print(b.begin(),b.end());
pair<IT, bool> result;
result = b.insert(5);
if(result.second) cout<<*result.first<<" inserted"<<endl;
if(b.insert(5).second) cout<<*result.first<<" inserted"<<endl;
else cout<<*result.first<<" alreadly exerts"<<endl;
pair<IT, IT> bounds = b.equal_range(4);
cout<<*bounds.first<<" "<<*bounds.second;
return 0;
}
输出结果
1 2 3 4 6
5 inserted
5 alreadly exerts
4 5
成员函数
iterator find(const T &val);
//查找值为val的元素,返回其迭代器。若找不到,返回end().
iterator insert(const T &val);
//将val插入到容器中,并返回其迭代器。
void insert(iterator first, iterator last);
//将区间[first,last)插入容器
int count(const T &val);
//统计有多少个元素的值和val相等
iterator lower_bound(const T &val);
//查找一个最大位置it,使得[begin(),it)中所有的元素都比val小
iterator upper_bound(const T &val);
//查找一个最小位置it,使得[it,end())中所有的元素都比val大
pair<iterator,iterator> equal_range(const T &val);
//同时求得lower_bound和upper_bound
iterator erase(iterator it);
//删除it指向的元素,返回其后面元素的迭代器(VS上是如此,但DEV上不是这样)