[STL] set & multiset

前言

第一次写这种关于某一个类的常用方法的总结, 参考了Sam 大叔的文章STL之list容器详解, 之后根据cppreference.com网站的资料归纳而来

Set 与 multiset 容器

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;
template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class multiset;

set 是C++标准模版库(STL)中的部分内容.
通过比较函数 Compare 进行排序, 通常使用红黑树实现(还没有学到, 暂时理解为二叉搜索树)
multiset 与 set 差不多, 不同之处在于它允许拥有多个相同键的值
使用这两个容器之前必须添加头文件 #include <set>, 它们都属于std命名域

常用函数描述及示例

函数 复杂度 描述 示例
构造函数 \(O(1)\) 创建一个集合/复合集合容器 set S; multiset S;
size() \(O(1)\) 返回set中的元素数 cout << S.size()
clear() \(O(n)\) 清空set S.clear()
begin() \(O(1)\) 返回指向set开头的迭代器 set::iterator it = S.begin();
end() \(O(1)\) 返回指向set末尾的迭代器 set::iterator end = S.end();
insert(k) \(O(log_{n})\) 向set中插入元素k S.insert(6);
erase(k) \(O(log_{n})\) 删除键值为k的元素 S.erase(6);
find(k) \(O(log_{n})\) 搜索键值为k的元素, 并返回指向该元素的迭代器, 如果没有, 则返回末尾end() if (S.find(6) != S.end()) cout << "find 6";
count(k) \(O(log_{n})\) 返回与k键值相同的元素的数量 cout << S.count(6);
lower_bound(k) \(O(log_{n})\) 搜索第一个不小于k键值的元素, 并返回指向该元素的迭代器, 如果没有则返回末尾end() set::iterator it = S.lower_bound(6);
upper_bound(k) \(O(log_{n})\) 搜索第一个大于k键值的元素, 并返回指向该元素的迭代器, 如果没有则返回末尾end() set::iterator it = S.upper_bound(6);

原文地址:https://www.cnblogs.com/by-sknight/p/10932337.html

时间: 2024-10-10 10:13:52

[STL] set & multiset的相关文章

stl之multiset容器的应用

与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上也是multiset容器的头文件.由于这个set头文件也包括multiset所需的红黑树和自身实现文件.仅仅要用宏语句"#include<set>"包括进来,就可对multiset容器的应用代码进行编译. 创建multiset对象 与set容器一样,multiset容器提供例如

STL学习(multiset Vector)

Vector比数组好用多了,毕竟是可变长的. 常用来建图. 需要掌握的就是构造函数,添加数据,删除数据. #include<set> #include<ctime> #include<cmath> #include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> #define maxn 1100

STL之multiset

参见http://www.cplusplus.com/reference/set/multiset/ template < class T,                                     // multiset::key_type/value_type                 class Compare = less<T>,        // multiset::key_compare/value_compare                 cla

C++STL之multiset多重集合容器

multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明头文件包含"#include<set>", 由于它包含重复元素, 所以, 在插入元素, 删除元素, 查找元素上较set有差别. 1.1multiset元素的插入 下面这个程序插入了重复键值"123", 最后中序遍历了multiset对象. #include&

【multiset】hdu 5349 MZL&#39;s simple problem

[multiset]hdu 5349 MZL's simple problem 题目链接:hdu 5349 MZL's simple problem 题目大意 n次操作,插入元素.删除最小元素.查询最大元素并输出. C++STL的multiset的使用 set--多元集合(元素不可重复),multiset--可重复元素的多元集合 多元集合(MultiSets)和集合(Sets)相像,只不过支持重复对象.(具体用法请参照set容器) set和multiset内部是以平衡二叉树实现的: 从内部数据结

Codeforces-808D Array Division 【multiset】

Description Vasya has an array a consisting of positive integer numbers. Vasya wants to divide this array into two non-empty consecutive parts (the prefix and the suffix) so that the sum of all elements in the first part equals to the sum of elements

Codeforces-808D Array Division (multiset 折半???)

题目链接: http://codeforces.com/problemset/problem/808/D 题意: 给定一个数列,移动0或1个数字,使数列能从某个位置分开前后两半的和相等. 思路: from: http://www.cnblogs.com/robin1998/p/6864278.html 我们可以假想有个隔板从左向右扫,每次两边的和的差值为x,若能找到某一边(看那边大)的一个数为x/2,则将它放到另一边就满足条件.扫一遍O(n),数据是无序的,如果暴力查找则总复杂度O(n^2)无法

STL------set和multiset 学习笔记

C++ STL set和multiset 1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样.所有的操作的都是严格在logn时间之内完成,效率非常高.set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同. 创建 multiset<ss> base; 删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除 base.count( a ):set能返回0或者1,multiset是有多

算法问题分类---Top-K问题与多路归并排序

Pro1:寻找前K大数 方法1:K小根堆  后面的值若大于当前根,则替换之,并调整堆 大部分人都推荐的做法是用堆,小根堆.下面具体解释下: 如果K = 1,那么什么都不需要做,直接遍历一遍,时间复杂度O(N). 下面讨论K 比较大的情况,比如1万. 建立一个小根堆,则根是当前最小的第K个数.然后读入N-K个数,每次读入一个数就与当前的根进行比较,如果大于当前根,则替换之,并调整堆.如果小,则读入下一个. 时间复杂度O(N*logK). 方法2:利用快排分区思想: 本题还有一个时间复杂度比较好的做