首页 > 编程语言 > 详细

C++ multiset 学习笔记

时间:2019-11-05 12:26:34      阅读:77      评论:0      收藏:0      [点我收藏+]

https://www.luogu.org/blog/yu123123/Templet

set和multiset会根据特定的排序原则将元素排序。两者不同之处在于,multisets允许元素重复,而set不允许重复。

基本的操作函数:

1.Basics

创建一个set/multiset:

这里以multiset为例子:

multiset<int> s;

创建一个int类的multiset

s.max_size()返回最多容纳的元素个数

s.size()当前容器中的元素个数

s.empty()判断容器是否为空

2.特殊的搜索函数

multiset <int,greater<int> > s;创建一个从大到小排序的类型

multiset<int,less<int>> s;创建一个从小到大排序的类型(也就是默认)

s.begin(),s.end();

返回s的首/尾迭代器

s.count(x)查询容器中x元素的出现次数

s.find(x) 查询容器中x元素的第一次出现位置,如果没有返回s.end();

s.lower_bound(x) 返回一个迭代器,标记s中出现的第一个大于等于x的元素位置

s.upper_bound(x) 返回一个迭代器,标记s中出现的第一个大于x的元素位置

s.insert(x) 在s容器中插入x元素

for(multiset<int>::iterator it=s.begin();it!=s.end();it++)
printf("%d ",*it);如何遍历一个s容器

s.erase()当无参数的时候会将整个容器中的元素全部删掉!

s.erase(pos)只会删除迭代器pos所指向的元素

s.erase(l,r) 会删除区间[l,r)内的所有元素!

https://www.jianshu.com/p/ecd7f66e11d3

#include <set>  
#include <iostream>  
using namespace std;  
  
int main()  
{  
    ///1. 初始化  
    multiset<int> num;  
    multiset<int>::iterator iter,beg,end;  
    cout << num.max_size() << endl;///multiset容纳上限  
    cout << endl;  
  
    ///2. 添加元素  
    for (int i = 0; i < 10; i++)  
        num.insert(i);  
    cout << num.size() << endl;  
    cout << endl;  
  
    ///3. 遍历  
    for (iter = num.begin(); iter != num.end(); iter++)  
        cout << *iter << " " ;  
    cout << endl;  
    cout << endl;  
  
    ///4. 查询  
  
    iter = num.find(1);  
    if (iter != num.end())  
        cout << *iter << endl;  
    else  
        cout << -1 << endl;  
  
    iter = num.find(99);  
    if (iter != num.end())  
        cout << *iter << endl;  
    else  
        cout << -1 << endl;  
    cout << endl;  
  
    beg=num.lower_bound(2);  
    end=num.upper_bound(7);  
    for (; beg != end; beg++)  
        cout << *beg << " " ;  
    cout << endl;  
  
    ///5. 删除  
    iter = num.find(1);  
    num.erase(iter);  
    cout << num.size() << endl;  
    for (iter = num.begin(); iter != num.end(); iter++)  
        cout << *iter << " " ;  
    cout << endl;  
    cout << endl;  
  
    ///6. 判空与清空  
    if (!num.empty())  
        num.clear();  
}  

 

 

C++ multiset 学习笔记

原文:https://www.cnblogs.com/little-cute-hjr/p/11797527.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!