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\)在英文中的 ...
随机推荐
- <转载>apache 配置 http://www.blogjava.net/bukebushuo/articles/229103.html
基于 NCSA 服务器的配置文件 由 Rob McCool 编写,龙子翻译 Apache服务器主配置文件. 包括服务器指令的目录设置. 详见 <URL:http://www.apache.org ...
- iOS工程结构理解
iOS开发中关于工程结构有三个关键部分,分别是:Targets,projects 和 workspaces. Targets指定了工程或者库文件如何编译,包括building setting,comp ...
- add_polygon_to_map
var poly = new esri.geometry.Polygon({ "rings": [ [[117.008726, 30.931672], [117.009635, 3 ...
- snmp安装,及测试
https://www.cnblogs.com/xdp-gacl/p/4016524.html
- SaltStack 和 Ansible 的简单比较
https://blog.csdn.net/nqxqxq/article/details/76154847 https://www.cnblogs.com/lgeng/p/6567424.html ...
- kotlin学习(二)——类
Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...
- python语言程序设计-北京理工大学-嵩天等课件代码整理
#TempConvert.py TempStr = input("请输入带有符号的温度值: ") if TempStr[-1] in ['F', 'f']: C = (eval(T ...
- 用waitpid函数回收进程
waitpid函数:作用同wait,但可指定pid进程清理,可以不阻塞. 原型:pid_t waitpid(pid_t pid, int *status, in options); 返回值:成功时返回 ...
- java学习书单
1 程序员必读书单 1.0 https://blog.csdn.net/onlylove_longshao/article/details/52337865 2 程序员读书雷达 ht ...
- linux 时间相关的一些总结
仅作为内核代码中时间管理模块的笔记,3.10内核,很乱,不喜勿喷. 先有time,后有timer. 常用的time结构有哪些?除了大名鼎鼎的jiffies和jiffies64之外,还有常用的一些结构如 ...