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的更多相关文章

  1. 转自http://blog.sina.com.cn/daylive——C++ STL set&multiset

    C++ STL set和multiset的使用 1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就  像一个集合一样.所有的操作的都是严格在logn时间 ...

  2. [STL]set/multiset用法详解[自从VS2010开始,set的iterator类型自动就是const的引用类型]

    集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...

  3. STL之multiset

    参见http://www.cplusplus.com/reference/set/multiset/ template < class T,                            ...

  4. 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 ...

  5. STL - 容器 - MultiSet

    MultiSet根据特定排序准则,自动将元素排序.MultiSet允许元素重复.一些常规操作:MultiSetTest.cpp #include <iostream> #include & ...

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

    multiset多重集合容器 multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许. multiset也需要声明 ...

  7. stl之multiset容器的应用

    与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上 ...

  8. 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 ...

  9. 详解C++ STL multiset 容器

    详解C++ STL multiset 容器 本篇随笔简单介绍一下\(C++STL\)中\(multiset\)容器的使用方法及常见使用技巧. multiset容器的概念和性质 \(set\)在英文中的 ...

随机推荐

  1. 廖雪峰老师Python3教程练习整理

    1.定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax2 + bx + c = 0的两个解 # -*- coding: utf-8 -*-import mathde ...

  2. nginx 虚拟主机、反向代理服务器及负载均衡,多台主机分离php-fpm实验

    一.简介 本章介绍一些架构原理基础知识, 1.1.LNMP及php-fpm 请参考https://www.cnblogs.com/zhangxingeng/p/10242902.html 1.2.透明 ...

  3. eclipse插件spket安装

    1.

  4. 我的母校zbvc试做

    一.观察分析页面布局 可以从上至下分为6大部分 logo栏 menu菜单栏 slide幻灯片 news新闻区域 other其他 bottom底部 二.logo 分为三部分 ①左侧logo ②中间log ...

  5. psutil模块

    python模块之psutil 一.psutil模块 1.介绍 psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率( ...

  6. day13-文件操作

    1.打开与关闭 1.1.open() close()我们使用 open() 函数打开文件.这个函数将返回一个文件对象,我们对文件的读写都将使用这个对象.open() 函数需要三个参数,第一个参数是文件 ...

  7. qurtz.net

    Quartz.NET的使用(附源码)(作者 陈珙)   简介 虽然Quartz.NET被园子里的大神们写烂了,自己还是整理了一篇,结尾会附上源码地址. Quartz.NET是一款功能齐全的开源作业调度 ...

  8. Android Studio 上传GitHub项目失败后的一些问题

    在Android Studio上传项目到GitHub时候多上传了了一些项目,想删除,但是报诸如 Remote project is already on GitHub 一些乱七八糟的问题,而且,提示p ...

  9. JAVAWEB 一一 fmt标签 和日期插件

    fmt标签 效果 操作:  ①导入标签 <%@ taglib uri=httpjava.sun.comjspjstlfmt prefix=fmt %> ②标签这么写 <td>& ...

  10. linux下搭建生成HLS所需的.ts和.m3u8文件

    要想利用HLS来实现视频的在线播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 在Mac下,苹果提供了streamingTools的工具,里面有mediafi ...