STL set集合用法总结(multiset)

2017-08-20 15:21:31

writer:pprp

set集合容器使用红黑树的平衡二叉树检索树,不会将重复键值插入,检索效率高 logn

检索使用中序遍历,所以可以将元素从小到大排列出来

/*
name : usage of Set
writer : pprp
declare : null
date ; 2017/8/20
*/
#include <bits/stdc++.h>

using namespace std;

void print(set<int> &s)
{
    set<int>::iterator it;
    for(it = s.begin(); it != s.end(); it++)
    {
        cout << *it <<" ";
    }
    cout << endl;
}

void printms(multiset<int> &ms)
{
    set<int>::iterator it;
    for(it = ms.begin() ; it != ms.end() ; it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

int main()
{
    set<int> s;
    //set的建立
    for(int i = 0 ; i <= 10 ; i++)
    {
        pair<set<int>::iterator, bool> p = s.insert(i);//用于判断是否插入成功
        if(p.second)
            cout << "successful" << endl;
        else
            cout << "can not insert the same word" << endl;
    }

    set<int> s2(s);//初始化

    print(s2);

    s2.erase(s2.begin()); //只把头删除了

    print(s2);

    s2.erase(s2.erase(10)); //把头和值位10的点都删除了

    print(s2);

    //完成对某个元素的查找
    set<int>::iterator i;
    i = s2.find(5);
    if(i != s2.end())
    {
        cout << "find" << endl;
    }
    else
        cout << "can not find" << endl;

    //测试是否可重复
    multiset<int> ms;
    for(int i = 0 ; i <= 20 ; i = i + 2)
    {
        ms.insert(i);
        ms.insert(i+2);
        ms.insert(i+3);
        ms.insert(i+4);
    }

    //测试是否有序
    ms.insert(-1);
    ms.insert(100);

    printms(ms);

    //查找元素
    int v = 8;
    multiset<int>::iterator t = ms.find(v);
    if(t != ms.end())
    {
        cout << *t  << endl;
    }

    //查找相同元素
    pair<multiset<int>::iterator,multiset<int>::iterator> cmp = ms.equal_range(v);

    cout << *cmp.first << endl; //第一个大于等于该元素的值
    cout << *cmp.second << endl; //第一个大于该元素的值

    cout << ms.count(6) << endl;//集合中元素为6的个数

    multiset<int>::iterator ii;

    ii = ms.lower_bound(8);
    cout << *ii << endl;
    ii = ms.upper_bound(8);
    cout << *ii << endl;

    return 0;
}
时间: 2024-10-05 16:00:21

STL set集合用法总结(multiset)的相关文章

STL的其他用法总结

2017-08-20 17:26:07 writer:pprp 1.adjacent_find() 下面是源码实现: template <class ForwardIterator> ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last) { if (first != last) { ForwardIterator next=first; ++next; while (next != last) {

单词数 (STL set集合)

单词数 Problem Description lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Input 有多组数据,每组一行,每组就是一篇小文章.每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束. Output 每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数. Sample Input you are my friend # Sample

STL vector+sort排序和multiset/multimap排序比较

本文由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在通过vector+sort进行排序时,所有元素需要先存入vector容器中,sort在排序时又需要将元素全部取出来再进行排序.multimap底层实现为红黑树,因此元素在插入的过程中就实现了排序.那么到底哪一种排序速度更快呢? 下面有一个测试程序: if  (gettimeofday(&tv,

STL多重集合multiset

导语:今天看IOI2004的论文集,学到了一种集合函数,顺便把它记录下来,一位很牛的学长关于此集合写的很详细,可以参考他的博客链接click here~~ 例题:支付帐单: 题目描述 比尔最近遇到了一件麻烦事.每天上午,他会收到若干张帐单(也可能一张也没收到),每一张都有一定的面额.下午,他会从目前还没有支付的帐单中选出面额最大和最小的两张,并把它们付清.还没有支付的帐单会被保留到下一天.现在比尔已经知道他每天收到帐单的数量和面额,请你帮他给出支付的顺序. 约束条件 天数的上限为30,000,每

c++ STL set 集合的常见用法

http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还得保证根节点左子树的高度与右子树高度相等.平衡二叉检索树使用中序遍历算法,检索效率高于vector.deque和list等容器,另外使用中序遍历可将键值按照从小

stl set 集合的操作,,转载

STL set B 添加义项 ? STL 对这个序列可以进行查找,插入删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效.而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的.这在收集一个数据的具体值的时候是有用的.集合中的元素按一定的顺序排列,并被作为集合中的实例.一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有

C++中的STL中map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一

(转)C++ STL set() 集合

set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高.set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),

【STL】集合运算

STL中有可以实现交集.并集.差集.对称差集的算法. 使用前需要包含头文件: #include <algorithm> 注:使用计算交集和并集的算法必须保证参与运算的两个集合有序!!! 交集: 例:求{1,2,3}和{2,3,4}的交集: 需要用到函数: set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), inserter(v3, v3.begin())): 第一个参数和第二个参数是迭代器的形式,指定了第一个集合参与运算的范