zoukankan      html  css  js  c++  java
  • set/multiset

    set/multiset

    1. 特性
          set保证出现在set内的元素只出现一次,且按照字典序从小大到大排序

    2. 初始化

    ① 初始化一个集合

    set<int> S;
    

    ② 复制一个集合

    set <int > Ss(S);
    
    1. 求长度(时间复杂度为O(1))
    set<int> s;
    s.size();
    
    1. 判空(时间复杂度为O(1))
    a.empty();
    
    1. 清空
    a.clear();
    
    1. 删除元素/插入元素
    a.erase(1);  // 删除为1的那个值   ,时间复杂度为O(logn )
    a.erase(a.begin());  // 删除set的第一个元素
    a.erase(iterator::it1, iterator::it2);  // 删除[it1, it2)
    a.insert(1);  // 插入一个元素1
    
    1. 判断一个数是否出现过
    a.count(x);  // 判断x是否在集合中出现过,如果出现过返回1,否则0
    
    1. 迭代器
    a.begin();  // 第一个元素的迭代器
    a.end();  // 最后一个元素的下一位的迭代器
    
    1. 遍历
        1.迭代器遍历
        for (set<int> ::iterator it = S.begin(); it != S.end(); ++it)
            cout << *it ;
    
        2. c++方式遍历
        for (auto Si: S) cout << Si << ends;
    
    1. 查找(支持lower_bound() 和 upper_bound()操作)
    set<int> S;
    S.insert(1);
    S.insert(2);
    set <int> ::iterator it1 = S.lower_bound(2);
    if (it1 != S.end()) cout << *it1;
    else cout << 0;
    set <int> ::iterator it2 = S.find(2);
    S.erase(it2);
    
    1. multiset的性质和set一样,上面全是set的特性,而multiset在set的特性之上使得一个集合内可以出现多次同一个元素,multiset内的元素也是按照字典序排好序的
    multiset <int> s;
    s.insert(1);
    s.insert(1);
    for (auto si: s) cout << si << ends;
    

    输出

    1 1
    

        在s.erase(int x)时,会删除所有出现的x,时间复杂度为O(logn + k) (k为出现次数)

    multiset <int> s;
    s.insert(1);
    s.insert(1);
    s.erase(1);
    cout << s.empty();
    

    输出

    1
    
  • 相关阅读:
    【转】15 个 JavaScript Web UI 库
    【转】C# WebRequest发起Http Post请求模拟登陆并cookie处理示例
    【转】33个JavaScript自动完成脚本
    大数据运算问题
    页面占位符的使用
    sql 数据库默认值问题
    jquery动态绑定像Repeater和dataList一样绑定数据源
    seo页面优化的要点
    asp.net控件不可乱用的属性
    jquery经验篇
  • 原文地址:https://www.cnblogs.com/spciay/p/13383133.html
Copyright © 2011-2022 走看看