C++multiset集合
multiset集合容器:------ 和set的区别:set容器中所有的元素必须独一无二,而multiset容器中元素可以重复调用头文件:#includeusing namespace std;详细用法(部分):multiset t ------ 定义一个int类型的容器t.insert(k) ------ 插入元素kt
multiset集合容器:
------ 和set的区别:set容器中所有的元素必须独一无二,而multiset容器中元素可以重复
调用头文件:
#include<set>
using namespace std;
详细用法(部分):
multiset<int> t ------ 定义一个int类型的容器
t.insert(k) ------ 插入元素k
t.count(k) ------ 判断元素k在容器内出现的次数(为0表示不在容器中)
t.erase(k) ------ 删除容器中所有元素k,若不存在则删除无效
t.clear() ------ 清空容器
t.size() ------ 返回容器现有元素个数
t.empty() ------ 判断容器是否为空
想遍历set里的元素或进行进一步修改,必须定义对应迭代器,以下三种定义方法(迭代器类似于指针)
multiset<int>::iterator it ------ 定义正向迭代器
multiset<int>::reverse_iterator rit; ------ 定义反向迭代器
auto it = t.begin(); ------ 因为t.begin()返回正向迭代器,所以it自动被定义为正向迭代器,可适应其他所有操作
以下需要迭代器的操作:
t.begin() ------ 返回multiset中第一个元素,类型为正向迭代器
t.rbegin() ------ 返回multiset中最后一个元素,类型为反向迭代器
t.end() ------ 返回multiset中最后一个元素,类型为正向迭代器
t.rend() ------ 返回multiset中第一个元素,类型为反向迭代器
t.find(k) ------ 寻找k,若找到返回第一个k对应的迭代器,否则返回end(),所以可以用t.erase(t.find(k))的方法
来删除容器中其中一个等于k的元素
t.insert(a, b) ------ 插入指针[a, b)之间的元素
t.erase(it) ------ 删除迭代器it对应的元素
t.erase(l, r) ------ 删除迭代器[l, r)之间的元素
lower_bound(k) ------ 返回第一个大于等于k的元素的迭代器
upper_bound(k) ------ 返回第一个大于k元素的迭代器
#include<stdio.h>
#include<set>
using namespace std;
multiset<int> t;
int main(void)
{
int i;
for(i=1;i<=3;i++)
t.insert(2);
t.insert(1);
t.insert(4);
//printf("%d\n", t.size());
multiset<int>::iterator it;
for(it=t.begin();it!=t.end();it++) //输出1 2 2 2 4
printf("%d ", *it);
printf("\n");
it = t.find(2);
t.erase(t.find(2));
for(it=t.begin();it!=t.end();it++) //输出1 2 2 4
printf("%d ", *it);
printf("\n");
printf("%d %d\n", *(t.lower_bound(2)), *(t.upper_bound(2))); //输出2 4
return 0;
}
更多推荐
所有评论(0)