zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    软件工程课感想
    冲刺阶段(二)第五天 5月19日
    CATransition转场动画
    UIView与CALayer的区别
    CALayer的基本属性
    CALayer的基本属性和contexts的内容 即添加图片
    Quartz2D-master手动截图
    CoreAnimation-06-CAKeyframeAnimation 相关代码
    CoreAnimation-06-CAKeyframeAnimation
    视频播放
  • 原文地址:https://www.cnblogs.com/pprp/p/7400400.html
Copyright © 2011-2022 走看看