STL set

STL set

百科名片

STL 对这个序列可以进行查找,插入删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效。而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集合中的元素按一定的顺序排列,并被作为集合中的实例。一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。具体实现采用了红黑树的平衡二叉树的数据结构。

目录

集和多集(set 和multiset 容器类)
构造
方法:
集合操作:
例子:

编辑本段集和多集(set 和multiset 容器类)

#include <set>
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。
集和多集的区别是:set支持唯一键值,set中的值都是特定的,而且只出现一次;而multiset中可以出现副本键,同一值可以出现多次。

编辑本段构造

explicit set(const Compare&=compare());
如:set<int,less<int> > set1;
less<int>是一个标准类,用于形成升序排列函数对象。降序排列是用greater<int>。
Template<class InputIterator> set(InputIterator, InputIterator,\ const Compare&=compare());
如:set<int ,less<int> >set2(vector1.begin(),vector1.end());
通过指定某一预先定义的区间来初始化set对象的构造函数。
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() 返回一个用于比较元素间的值的函数

编辑本段集合操作:

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());//上面两个差集的并集

编辑本段例子:

1///
#include <iostream>
#include <set>
using namespace std;
int main(void)
{
set<int> set1;
for(int i=0; i<10; ++i)
set1.insert(i);
for(set<int>::iterator p=set1.begin();p!=set1.end();++p)
cout<<*p<<"";
if(set1.insert(3).second)//把3插入到set1中
//插入成功则set1.insert(3).second返回1,否则返回0
//此例中,集中已经有3这个元素了,所以插入将失败
cout<<"set insert success";
else
cout<<"set insert failed";
int a[] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0};
multiset<int> A;
A.insert(set1.begin(),set1.end());
A.insert(a,a+10);
cout<<endl;
for(multiset<int>::iterator p=A.begin();p!=A.end();++p)
cout<<*p<<" ";
cin.get();
return 0;
}
2
#include <iostream>
#include <set>
#include <string>
#include <algorithm>
using namespace std;
struct compare
{
bool operator ()(string s1,string s2)
{
return s1>s2;
}///自定义一个仿函数
};
int main()
{
typedef std::set<string,compare> _SET;
_SET s;
s.insert(string("sfdsfd"));
s.insert(string("apple"));
s.insert(string("english"));
s.insert(string("dstd"));
cout<<"s1:"<<endl;
std::set<string,compare>::iterator it = s.begin();
while(it!=s.end())
cout<<*it++<<" ";
cout<<endl<<"s2:"<<endl;
_SET s2;
s2.insert(string("abc"));
s2.insert(string("apple"));
s2.insert(string("english"));
it = s2.begin();
while(it!=s2.end())
cout<<*it++<<" ";
cout<<endl<<endl;
string str[10];
string *end = set_intersection(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//求交集,返回值指向str最后一个元素的尾端
cout<<"result of set_intersection s1,s2:"<<endl;
string *first = str;
while(first<end)
cout <<*first++<<" ";
cout<<endl<<endl<<"result of set_union of s1,s2"<<endl;
end = std::set_union(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//并集 first = str;
while(first<end)
cout <<*first++<<" ";
cout<<endl<<endl<<"result of set_difference of s2 relative to s1"<<endl;
first = str;
end = std::set_difference(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//s2相对于s1的差集 while(first<end)
cout <<*first++<<" ";
cout<<endl<<endl<<"result of set_difference of s1 relative to s2"<<endl;
first = str;
end = std::set_difference(s2.begin(),s2.end(),s.begin(),s.end(),str,compare());//s1相对于s2的差集
while(first<end)
cout <<*first++<<" ";
cout<<endl<<endl;
first = str;
end = std::set_symmetric_difference(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//上面两个差集的并集 while(first<end)
cout <<*first++<<" ";
cout<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab删除包含NaN的行

a(isnan(a(:,b)),:)[];%删除a矩阵中第b列包含NaN的行

哈希扩展长度攻击_哈希长度扩展攻击

哈希扩展长度攻击在这篇文章中&#xff0c;我将尽力避免夏季的低迷&#xff0c;而将重点放在比抱怨天气更有趣的事情上-哈希长度扩展攻击。 散列长度扩展攻击并不复杂也不复杂&#xff0c;说实话&#xff0c;这只是关于如何使用散列函数。 正如我以前的一篇文章中所讨论的那样&…

DataURL与File,Blob,canvas对象之间的互相转换的Javascript (未完)

canvas转换为dataURL (从canvas获取dataURL) var dataurl canvas.toDataURL(image/png); var dataurl2 canvas.toDataURL(image/jpeg, 0.8); 转:https://blog.csdn.net/cuixiping/article/details/45932793 转载于:https://www.cnblogs.com/fps2tao/p/9273815.html

sscanf用法详解-hdu2072

名称: sscanf() - 从一个字符串中读进与指定格式相符的数据.   函数原型:   Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );   int scanf( const char *format [,argument]... );   说明&#xff1a;   sscanf与scanf类似&#xff0c;都是…

只需几分钟即可安装Red Hat Container Development Kit(视频)

自从我开始使用各种形式的OpenShift&#xff08;例如带盒的Online&#xff0c;然后又作为容器化的图像&#xff09;玩耍以来&#xff0c;没有什么比Red Hat Container Development Kit&#xff08;CDK&#xff09;的可用性令我兴奋。 该套件使您可以轻松地访问完整的&#xff…

一、Objective-C之Runtime的概念

前一篇关于NSProxy代理涉及到的关于消息转发&#xff0c;把以前写的runtime文章从github上转移过来。一共三篇&#xff0c;似乎自己也忘记了一些runtime的细节&#xff0c;需要温故一下。 一、什么是Objc的Runtime&#xff1f; Runtime是Objc语言的磐石&#xff0c;Objc语言得以…

matlab 替换指定的元素

方法二&#xff1a;a[12 4 5 6 0 12 0];bfind(a0);%将a中的0替换为8a(b)8方法一&#xff1a;a[12 4 5 6 0 12 0];blogical(a0);%将a中的0替换为8&#xff08;%数值转逻辑&#xff0c;不知道为什么可以这样用&#xff09;a(b)8注&#xff1a;1. 该替换函数不能替换NaN替换NaN可用…

[P1580] yyy loves Easter_Egg I

Link: P1580 传送门 Solution: 拿来练练字符串的读入&#xff1a; 1、$gets()$相当于$c$中的$getline()$&#xff0c;但返回值为指针&#xff01;&#xff08;无数据时为NULL&#xff09; &#xff08;都读入换行符&#xff0c;并将其舍弃&#xff09; 2、$sscanf(起始指针,...…

matlab按某一列排序

bsortrows(a,2) %a 为要排序的矩阵。2表示按第几列进行排序&#xff0c;整数代表升序&#xff0c;负数代表降序。%将矩阵a按照第2列的升序排列&#xff0c;其他列不会作升序排列&#xff0c;而是将跟随着第2列 的变化&#xff0c;保持一一对应。bsortrows(a,-3) %将矩阵a按照…

python特殊函数__str__、__repr__和__len__

1.__str__ 首先介绍__str__ class Students(object):def __init__(self, *args):self.names args# def __str__(self): #   return str(self.names) # __repr__ __str__ ss Students(hyq,ysy) ss>>><__main__.Students at 0x2075a779828> 打印类对象…

MATLAB对矩阵中元素的访问

矩阵访问一律用()&#xff0c;元胞数组用{}a(i,j)%第i行第j列队元素a(:,j)%第j列的所有元素a(2:end,j)%第j列中第2行到最后一行的元素a(:,3:5)%第3〜5列的所有元素a(x)%第x个元素&#xff08;x为从最左边第1列开始编号&#xff0c;若a为4行5列&#xff0c;则a(10)a(2,3)&#x…

c函数scanf(),printf()等常用格式字符串

%d 短整形,一般占两个字节%u 无符号短整形%ld 长整形,一般占四个字节%c 字符型%s 字符串主要用在输入输出函数&#xff1a;scanf(),printf()里/a:蜂鸣&#xff0c;响铃 /b:回退&#xff1a;向后退一格 /f:换页 /n:换行&#xff0c;光标到下行行首 /r:回车&#xff0c…

jsf服务_使用JSF的面向服务的UI

jsf服务在大型软件开发项目中&#xff0c;面向服务的体系结构非常常见&#xff0c;因为它提供了可供不同团队或部门使用的功能接口。 创建用户界面时&#xff0c;应应用相同的原理。 对于具有开票部门和客户管理部门等的大型公司&#xff0c;组织结构图可能如下所示&#xff1a…

MATLAB矩阵对称旋转

fliplr(a) 矩阵左右翻转 flipud(a) 矩阵上下翻转 rot90(a)矩阵逆时针旋转90度&#xff08;把你的头顺时针旋转90看原数就可以知道结果了,^-^&#xff09;rot90(a,k) k参数定义为逆时针旋转90*k度。

English trip -- Phonics 3 元音字母e

xu言&#xff1a; 额...今天给我上自然拼读的maple老师 - . -和上次给我上第二集自然拼读的是同一个老师。突然考了考我上次学的内容~感觉大脑一片空白。看来review不能光说而不下苦功夫啊... 元音 vowel 长音 /i:/ be me we he chinese ee meet bee see sleep queen …

生成随机测试数据的文件的程序

例如以下简单的AB问题&#xff1a; 样例 输入&#xff1a; 1 2 输出&#xff1a; 3 答案&#xff1a; #include <stdio.h> int main() {int a,b;while(scanf("%d%d",&a,&b)!EOF){printf("%d\n",ab);}return 0; }机器的测试&#xff1a;…

ANTLR和Jetbrains MPS:解析文件并以树符号显示AST

Itemis再次这样做&#xff1a;他们刚刚为Jetbrains MPS发布了一个非常酷的新插件。 这允许定义新的树编辑器。 他们看起来像这样&#xff1a; 在这篇文章中&#xff0c;我们将看到&#xff1a; 如何在MPS中使用ANTLR解析器 如何使用树符号表示已解析的AST 特别是&#xf…

MATLAB判断矩阵相等

1. AB;%得到的是一个矩阵&#xff0c;对应值相等则返回1&#xff0c;否则返回02. ~norm(A-B);%若AB则A-B全零&#xff0c;norm(A-B)的结果为0&#xff0c;否则为1&#xff1b;其中norm为范数3. ~sum(sum(abs(A-B)));%原理和2相同&#xff0c;但是计算速度要快于2数倍 4. isequ…