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
    
  • 相关阅读:
    C#后台解析XML字符串并获取节点值
    table动态添加tr
    时间段检索时间段
    什么是数据结构
    PERSONAL VALUES
    C#接口
    基于ArcEngine与C#的鹰眼地图实现
    ENVI/IDL与ArcGIS集成开发的三种途径
    中国地图投影(实现Lambert投影)
    Git 的下载
  • 原文地址:https://www.cnblogs.com/spciay/p/13383133.html
Copyright © 2011-2022 走看看