STL::set/multiset
set: Sets are containers that store unique elements following a specific order。集合里面的元素不能修改,只能访问,插入或者删除。内部由二叉搜索树来实现(binary search trees);默认排序为:数字从小到大的顺序,可通过传入函数指针或者函数对象来修改排序规则。
multiset: 和 set 操作一样,不同点是 key 可以相同。
Iterators
begin:
end:
rbegin:
rend:
cbegin(c++11):
cend(c++11):
crbegin(c++11):
crend(c++11):
Capacity
empty:
size:
max_size:
Modifiers
insert:
erase:
swap:
clear:
emplace(c++11):
emplace_hint(c++11): hint(暗示):和 emplace 作用基本一致,首先假定一个插入位置,反正插入后还需要根据默认的排序函数进行排序,这样假定一个位置的作用当插入点就是这个位置或者离这个位置很近时可以提升查找插入位置的效率。
Observers:(还未搞懂怎么用。。。)
key_comp:
value_comp:
Operations
find: 在 set 中按值查找元素,找到返回该值的迭代器(双向迭代器),找不到返回 set.end()。
count: 查找 set 中和传入的值相同元素的个数,因为 set 中元素不会重复,所以返回值只能为 1 或者为 0;
lower_bound: 返回一个 大于等于 val 的迭代器(双向迭代器)
upper_bound: 返回一个 大于等于 val 的再向后移动一个位置(和 low_bound 的区别)的迭代器(双向迭代器)
equal_range: 返回一个 pair, 是一个包含所有和 val 相等元素的范围(pair.first 类似 low_bound,pair.second 类似 upper_bound)。用法如下例:
// set::equal_elements
#include <iostream>
#include <set> int main ()
{
std::set<int> myset; for (int i=; i<=; i++) myset.insert(i*); // myset: 10 20 30 40 50 std::pair<std::set<int>::const_iterator,std::set<int>::const_iterator> ret;
ret = myset.equal_range(); std::cout << "the lower bound points to: " << *ret.first << '\n'; //
std::cout << "the upper bound points to: " << *ret.second << '\n'; // return ;
}
补充问题:如何改变 set 中元素的(自定义)排列顺序?
// set::key_comp
#include <iostream>
#include <set>
using namespace std; bool greaters(int a,int b){
return a>=b;
} int main(){
set<int,bool(*)(int,int)> myset(greaters); // 传递函数指针
set<int,bool(*)(int,int)>::iterator it;
myset.insert();
myset.insert();
myset.insert();
for(it=myset.begin();it!=myset.end();it++)
cout<<' '<<*it; // 3 2 1
return ;
}
reference:
https://blog.csdn.net/gasdfrewqq/article/details/25309675
https://blog.csdn.net/lv1224/article/details/79789638
https://blog.csdn.net/lishuhuakai/article/details/51404214
note: set 不支持 operater [ ],at() 形式的访问元素,只能通过迭代器进行访问。
STL::set/multiset的更多相关文章
- 转自http://blog.sina.com.cn/daylive——C++ STL set&multiset
C++ STL set和multiset的使用 1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样.所有的操作的都是严格在logn时间 ...
- [STL]set/multiset用法详解[自从VS2010开始,set的iterator类型自动就是const的引用类型]
集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...
- STL之multiset
参见http://www.cplusplus.com/reference/set/multiset/ template < class T, ...
- STL set multiset map multimap unordered_set unordered_map example
I decide to write to my blogs in English. When I meet something hard to depict, I'll add some Chines ...
- STL - 容器 - MultiSet
MultiSet根据特定排序准则,自动将元素排序.MultiSet允许元素重复.一些常规操作:MultiSetTest.cpp #include <iostream> #include & ...
- C++STL之multiset多重集合容器
multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...
- stl之multiset容器的应用
与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上 ...
- 2.8 C++STL set/multiset容器详解
文章目录 2.8.1 引入 2.8.2 代码示例 2.8.3 代码运行结果 2.8.4 对组pair的补充 代码实例 运行结果 总结 2.8.1 引入 set/multiset容器概念 set和mul ...
- 详解C++ STL multiset 容器
详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的 ...
随机推荐
- Android开发之SurfaceView
SurfaceView介绍 通常情况程序的View和用户响应都是在同一个线程中处理的,这也是为什么处理长时间事件(例如访问网络)需要放到另外的线程中去(防止阻塞当前UI线程的操作和绘制).但是在其他线 ...
- PHP 扩展在 Linux(centos7)系统下的编译与安装 以 mysqli 为例
(操作系统 Centos7,环境版本 php7) 01,进入到 PHP 解压后的源码包的的 ext 文件夹 02,查看是否存在 mysqli 扩展 => ls, 如果不存在需要去响应网站下载 ( ...
- leetcode993
public class Node { public int CurNode; public int FatherNode; public int Layer; } public class Solu ...
- delphi多语言
LoadLangFromStrings http://docwiki.embarcadero.com/Libraries/Berlin/en/FMX.Types.TLang http://blog.c ...
- SonarQube与Eclipse配合
Sonar安装 下载Sonar 点击下面网址下载Sonar: http://dist.sonar.codehaus.org/sonar-3.5.1.zip ,下载后解压 解压后安装 解压后你将要看到如 ...
- day27-反射
1.介绍 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...
- class 方法
实例对象调用class方法时返回这个实例对象的isa指针,也就是对应的类对象: 类对象调用class方法时返回这个类对象本身. (注:如果想一直获得一个类的类对象,也就是isa指针,可以调用runti ...
- Delphi 泛型详解
http://www.cnblogs.com/jxgxy/category/216671.html
- webpack 引用vconsole
1.npm install -vconsole --save-dev 2.npm install -vconsele-webpack-plugin --save-dev 3.webpack.base. ...
- 使用 Python 把多个 MP4 合成一个视频(转)
这两天群里有个小伙伴有一个需求, 就是把很多个视频文件 合并成一个. 期间也找了各种软件, 如格式工厂, 但是只能一次合成50个文件, 小伙伴有几千个文件需要合成, 太繁琐; 又比如会声会影, 这个剪 ...