`

set和multiset

    博客分类:
  • STL
阅读更多

set和multiset:(两者用法基本相似,一个可重复一个不可重复)

1.一个容器,它其中所包含的元素的值是唯一的,集合中的元素按一定的顺序排列。

2.在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。

 

3.和所有关联式容器类似,通常使用平衡二叉树完成,事实上,set和multiset通常以红黑树实作而成。

4.自动排序的优点是使得搜寻元素时具有良好的性能,具有对数时间复杂度。但是造成的一个缺点就是:

不能直接改变元素值。因为这样会打乱原有的顺序。

改变元素值的方法是:先删除旧元素,再插入新元素。

存取元素只能通过迭代器,从迭代器的角度看,元素值是常数。

 

 

#include <set>

 

构造:

 

1.explicit set(const Compare&=compare());

   set<int,less<int> > set1; //less<int>是一个标准类,用于形成升序排列函数对象,降序排列是用greater<int>。

2.Template<class InputIterator> set(InputIterator, InputIterator,\ const Compare&=compare());

   set<int ,less<int> >set2(vector1.begin(),vector1.end());

3.set(const set<Key,Compare&>);

   set<int ,less<int> >set3(set2);

 

 

方法:

 

begin() 返回指向第一个元素的迭代器

clear() 清除所有元素

count() 返回某个值元素的个数

empty() 如果集合为空,返回true(真)

end() 返回指向最后一个元素之后的迭代器,不是最后一个元素

equal_range() 返回集合中与给定值相等的上下限的两个迭代器

erase() 删除集合中的元素

find() 返回一个指向被查找到元素的迭代器

get_allocator() 返回集合的分配器

insert() 在集合中插入元素

lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器

key_comp() 返回一个用于元素间值比较的函数

max_size() 返回集合能容纳的元素的最大限值

rbegin() 返回指向集合中最后一个元素的反向迭代器

rend() 返回指向集合中第一个元素的反向迭代器

size() 集合中元素的数目

swap() 交换两个集合变量

upper_bound() 返回大于某个值元素的迭代器

value_comp() 返回一个用于比较元素间的值的函数

 

 

STL中与set相关的算法:

 

std::set_intersection() :这个函数是求两个集合的交集。

std::set_union() :求两个集合的并集

std::set_difference():差集

std::set_symmetric_difference():得到的结果是第一个迭代器相对于第二个的差集并 上第二个相当于第一个的差集。

 

 

 

struct compare{
bool operator ()(string s1,string s2){
return s1>s2;
}///自定义一个仿函数
};
std::set<string,compare> s
string str[10];
string *end = set_intersection(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//求交集,返回值指向str最后一个元素的尾端
end = std::set_union(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//并集
end = std::set_difference(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//s2相对于s1的差集
end = std::set_difference(s2.begin(),s2.end(),s.begin(),s.end(),str,compare());//s1相对于s2的差集
end = std::set_symmetric_difference(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//上面两个差集的并集
 

 

 

 

分享到:
评论

相关推荐

    C++模板(vector、map、multimap、set、multiset)

    一共四个doc文件,list综合实例、multimap和map的实例、set和multiset的综合实例、vector综合实例

    C++set函数学习

    学习set参考资料,保证你会最快的学会set和multiset,PDF将详细介绍

    C++进阶课程讲义_v1.0.4.pdf

    10.2.8Set和multiset容器 111 10.2.9Map和multimap容器 118 10.2.10容器共性机制研究 123 10.2.11其他 124 10.3算法 125 10.3.1算法基础 125 10.3.2STL算法中函数对象和谓词 138 10.3.3常用的遍历算法 148 10.3.4...

    AVL_Tree实现STL中的map, set, multimap和multiset

    用AVL-tree数据结构作为底层机制,以STL底层空间配置器和iterator_traits编程技法实作出一个独立的关联式容器(map, set, multimap, multiset),并对外提供接口实现和STL完全兼容的容器。

    C++标准程序库STL的架构

    6.5.2 set和multiset举例 46 6.6 map和multimap 49 6.6.1 map和multimap的能力 50 6.6.2 将map视为关联式数组 52 6.6.3 map和multimap运用示例 52 6.6.4 综合示例 55 6.7 其它STL容器 57 6.7.1 HashTable 59 6.7.2 ...

    effective stl 中文 pdf

    条款22: 避免对set和multiset的键值进行修改 条款23: 考虑用排序的vector代替关联容器 条款24: 当效率很关键时尽量用map::insert代替map::operator 条款25: 让自己熟悉非标准的hash容器 迭代器 条款26: 尽量...

    C++Primer视频(中级)下载地址

    第10章 set 和 multiset 24.第11章 算法简介 25.第11章 函数对象简介 26.第11章 算法 元素计数 27.第11章 算法 最大值和最小值 28.第11章 算法 查找算法(1) 29.第11章 算法 查找算法(2) 30.第11章 ...

    Effictive STL CHM中文版

    条款22: 避免对set和multiset的键值进行修改 条款23: 考虑用排序的vector代替关联容器 条款24: 当效率很关键时尽量用map::insert代替map::operator 条款25: 让自己熟悉非标准的hash容器 迭代器 条款26: 尽量...

    effective stl stl 技巧

    条款22:避免原地修改set和multiset的键 条款23:考虑使用有序vector代替关联容器 条款24:当关乎效率时应该在map::operator[]和map-insert之间仔细选择 条款25:熟悉非标准散列容器 迭代器 条款26:尽量用...

    Effective STL(中文)

    避免使用vector&lt;bool&gt;&lt;br&gt;关联容器 条款19:了解相等和等价的区别 条款20:为指针的关联容器指定比较类型 条款21:永远让比较函数对相等的值返回false 条款22:避免原地修改set和multiset的键 条款23...

    kuangbin acm模板超级好用

    2.7.4 线性筛(同时得到欧拉函数和素数表) . . . . . . . . . . . . . . . . . . 32 2.8 高斯消元(浮点数) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.9 FFT . . . . . . . . . . ...

    STL_multiset和STL_set–算法–笔记

    STLSTL_multisetSTL_set STL_multiset 方法:multisetst; 定义了一个multiset变量st,st里面可以存放T类型数据,并且能自动排序。开始st为空 排序规则:表达式”a&lt;b为true,则a排在b前面 可用的方法 目的 格式 ...

    C++STL程序员开发指南【可搜索+可编辑】

    1-1-10 数组和指针技术的不同......................................... 14 1-2 C++存储技术........................................................ 15 1-2 一I C++存储类型.....................................

    Set:Swift中Multiset和PredicateSet的实现

    这是一个Swift微框架,实现了PredicateSet和一个由字典支持的Multiset。 用 多重集: // Union Multiset ( 1 , 2 , 3 ) + Multiset ( 3 , 4 , 5 ) // == Multiset(1, 2, 3, 3, 4, 5) // Difference Multiset ( 1 ,...

    C++ 头文件系列(set)详解

    头文件包含 set 、 multiset 两个类模版,这里要描述的概念与map非常相似,甚至连成员函数都几乎一样,所以这篇随笔会很短。 set set如果翻译成中文应该是集合的意思,这里更确切的说是 唯一有序集合 ,性质与map...

    红黑树: 理论与实现

    红黑树是一种很有意思的平衡检索树。...在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。

    C++STL实验报告-迭代器和非变异算法

    本实验主要练习容器set、multiset、map、multimap的使用方法,插入迭代器、反向迭代器的用法,以及四种非变异算法的基本用法。 实验器材: VScode 实验内容: 一.回顾以上四种容器相关的例题(不作为实验报告内容)...

    Map和Set的区别

    set只有值,可以认为只有一个数据,并且set中元素不可以重复且自动排序,如果需要重复则使用multiset,要说区别的话,存储的东西不一样,应用场景不一样,支持的操作也不一样,很多不同。  map和set支持快速查找和...

    c++容器使用经验

    标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。

Global site tag (gtag.js) - Google Analytics