4.2 set和multiset
使用必须包含头文件set
1)multiset
*:定义
如果不给第二个参数,默认less<key>,即用<来进行。
例如:
A是一个类的名字,则可以定义一个容器对象如下:
multiset<A>s;
由于multiset 的类型参数可以默认,所以上面的语句等价于:
multiset<int, less<A>,allocator<A>s>;
**:multiset的成员函数
find和count并不是通过==来进行比较值是否相等。它们的比较原则是x<y和y<x同时为假。
3)例
//program 19.4.2.1.cpp multiset的用法 #include <iostream> #include <set> //使用multiset须包含此文件 using namespace std; template <class T> void Print(T first, T last) {for(;first != last ; ++first)cout << * first << " ";cout << endl; } class A {private: int n;public:A(int n_ ) { n = n_; }friend bool operator< ( const A & a1, const A & a2 ) { return a1.n < a2.n; }friend ostream & operator<< ( ostream & o, const A & a2 ){ o << a2.n; return o; }friend class MyLess; }; class MyLess { public:bool operator()( const A & a1, const A & a2) //按个位数比大小{ return ( a1.n % 10 ) < (a2.n % 10); } }; typedef multiset<A> MSET1; //MSET1用 "<"比较大小 typedef multiset<A,MyLess> MSET2; //MSET2用 MyLess::operator()比较大小 int main() {const int SIZE = 6;A a[SIZE] = { 4,22,19,8,33,40 };MSET1 m1; m1.insert(a,a+SIZE); m1.insert(22);cout << "1) " << m1.count(22) << endl; //输出1) 2cout << "2) "; Print(m1.begin(),m1.end()); //输出 2) 4 8 19 22 22 33 40MSET1::iterator pp = m1.find(19);if( pp != m1.end() ) //条件为真说明找到cout << "found" << endl; //本行会被执行,输出 foundcout << "3) "; cout << * m1.lower_bound(22) << "," <<* m1.upper_bound(22)<< endl; //输出 3) 22,33pp = m1.erase(m1.lower_bound(22),m1.upper_bound(22));//pp指向被删元素的下一个元素cout << "4) "; Print(m1.begin(),m1.end()); //输出 4) 4 8 19 33 40cout << "5) "; cout << * pp << endl; //输出 5) 33MSET2 m2; // m2里的元素按n的个位数从小到大排m2.insert(a,a+SIZE);cout << "6) "; Print(m2.begin(),m2.end()); //输出 6) 40 22 33 4 8 19return 0; }
2)set
*:定义
template<class Key, class Pred=less<Key>,class A=allocator<Key>
class set {....}
set和multiset相似,差别在于set中不能有重复元素。multiset的成员函数set也有,但由于没有重复元素,所以set中插入单个元素的insert成员函数和multiset不同,其原型如下,返回一个pair模板类的对象。
pair<iterator,bool>insert(const T & val);
假如set的insert成员函数的返回值是对象x,那么x.second为ture,则说明插入成功,此时x.first指向被插入元素的迭代器;x.second为false,说明已经有一个一样的值,插入失败,x.first指向原有那个元素的迭代器。
关联容器的另一个成员函数equal_range返回值也是pair模板类对象:
pair<iterator,iterator>equal_range(const T & val);
2)例
//program 19.4.3.1.cpp set的用法: #include <iostream> #include <set> //使用set须包含此文件 using namespace std; int main() {typedef set<int>::iterator IT;int a[5] = { 3,4,6,1,2 };set<int> st(a,a+5); // st里是 1 2 3 4 6pair< IT,bool> result;result = st.insert(5); // st变成 1 2 3 4 5 6if( result.second ) //插入成功则输出被插入元素cout << * result.first << " inserted" << endl; //输出: 5 insertedif( st.insert(5).second ) cout << * result.first << endl;elsecout << * result.first << " already exists" << endl; //输出 5 already existspair<IT,IT> bounds = st.equal_range(4);cout << * bounds.first << "," << * bounds.second ; //输出:4,5return 0; }
转载于:https://www.cnblogs.com/by-dxm/p/5473531.html
4.2 set和multiset相关推荐
- C++ 中multiset 的使用
multiset 的说明 C++ 中 multiset 它的主要特点就是元素会自动排序切允许有重复的元素(set中不允许元素重复) multiset 同样也是STL中的模板使用的时候 需要先引入 #i ...
- 洛谷P1110 报表统计 multiset stl好题
题目链接 一开始自己想的是multiset维护顺序结构,然后查找所有的值差最小时候找加入的当前点的前驱以及后继,然后查找相邻两个的就用线段树维护一个差最小值~,但是后来发现是全局的,直接再开一个mul ...
- 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅
这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...
- STL set multiset
STL容器大的方向分为两类,序列式容器和关联式容器. 这两者通过数据在容器内的排列来区分.关联容器和顺序容器的根本不同在于:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素则是按它们在容器 ...
- 【ACM】 multiset 的 一些应用
一.The kth great number 题目链接:https://vjudge.net/problem/HDU-4006 用set写超时 (在VJ里,用C++显示Compilation Erro ...
- C++_STL——map、multimap、set、multiset
C++_STL--map.multimap.set.multiset 内部都由红黑树实现 这里专栏里其他文章提到的函数(方法)就不会再说 参考:cplusplus 有序哈希表 有序不可重复哈希表(映射 ...
- Guava包学习--Multiset
Multiset之前倒是没用过,后来看了下还挺有用,其实它就是支持重复元素的HashSet,相当于list+set的集合,综合了两种集合的优点. 它扩展了Collection: @GwtCompati ...
- C++知识点32——使用C++标准库(关联容器set和multiset的初始化,赋值,查找,添加,删除与迭代器失效)
关联容器map和multimap已经在博客https://blog.csdn.net/Master_Cui/article/details/108690877和https://blog.csdn.ne ...
- MultiSet和Set的区别
MultiSet和Set的区别: 1) MultiSet 可以插入完全相同的两条记录 会提高数据插入的速度 2) Set 不可以插入完全相同的两条记录 保证记录的唯一性 由于需要查重处理,会降低数据插 ...
- STL:set/multiset用法详解
集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...
最新文章
- JAVA Static方法与单例模式的理解
- 深入学习Redis(4):哨兵
- PyTorch系列 | 如何加快你的模型训练速度呢?
- android手机设置时间设置,如何设置电信定制手机日期与时间
- 《那些年啊,那些事——一个程序员的奋斗史》——86
- Activate Windows server 2003 in VMware
- My97DatePicker 组件使用方法---My97DatePicker
- ABP框架系列之四十九:(Startup-Configuration-启动配置)
- 数据保护:从“随意架构”到简单可控
- cad批量打印快捷键_批量打印CAD图(无删减版)
- 窗口电压比较器电路设计
- Android 腾讯Bugly热更新笔记
- 树莓派配套系统_3.95寸配套树莓派显示屏,移植好操作系统,普及树莓派显示屏...
- DS栈—波兰式,逆波兰式
- 计算机windows怎么开启,Win10怎么打开我的电脑_Win10正式版怎么打开我的电脑?-192路由网...
- TortoiseSVN配置外部对比工具
- 创业之前你需要了解的九个真相
- logback 日志脱敏 隐藏PII信息
- 网络基础系统红枫产线落地金华,助力打造千亿级产业集群!
- VLAN应用篇系列:(7)华为 H3C交换机VLAN聚合功能(实现不同VLAN,同一网段,二层隔离,三层互通)
热门文章
- Java游戏程序设计教程 4.5打砖块游戏
- linux批量配置文件,linux下根据用户输入批量修改配置文件ip
- pandas获取某行数据
- 基础知识(四)C++常用函数.txt
- Caffe傻瓜系列(3):激活层(Activiation Layers)及参数
- windows10下搭建spark平台
- 2021-08-21 初识javabean
- input 上传图片_selnium远程机上传图片遇到的坑-布布扣
- 差分进化算法和遗传算法 区别 谁更好
- LaTeX 切换其它另外的期刊会议模板