setmultiset

    科技2023-11-12  107

    set/multiset

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

    初始化

    ① 初始化一个集合

    set<int> S;

    ② 复制一个集合

    set <int > Ss(S); 求长度(时间复杂度为O(1)) set<int> s; s.size(); 判空(时间复杂度为O(1)) a.empty(); 清空 a.clear(); 删除元素/插入元素 a.erase(1); // 删除为1的那个值 ,时间复杂度为O(logn ) a.erase(a.begin()); // 删除set的第一个元素 a.erase(iterator::it1, iterator::it2); // 删除[it1, it2) a.insert(1); // 插入一个元素1 判断一个数是否出现过 a.count(x); // 判断x是否在集合中出现过,如果出现过返回1,否则0 迭代器 a.begin(); // 第一个元素的迭代器 a.end(); // 最后一个元素的下一位的迭代器 遍历 1.迭代器遍历 for (set<int> ::iterator it = S.begin(); it != S.end(); ++it) cout << *it ; 2. c++方式遍历 for (auto Si: S) cout << Si << ends; 查找(支持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); 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
    Processed: 0.021, SQL: 8