***************************************************

更多精彩,欢迎进入:http://shop115376623.taobao.com

STL视频教程:

http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-9510581626.21.y9vLuz&id=43055362725

***************************************************

C++ STL set和multiset的使用

1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就    像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。

set和multiset的区别是:set:插入的元素不能相同,但是multiset可以相同。

创建 multiset<ss> base;

删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除

base.count( a ):set能返回0或者1,multiset是有多少个返回多少个.

Set和multiset都是引用<set>头文件,复杂度都是logn

2,Set中的元素可以是任意类型的,但是由于需要排序,所以元素必须有一个序,即大小的比较关系,比如    整数可以用<比较.

3,自定义比较函数;

include<set>

typedef struct

{ 定义类型 }

ss(类型名);

struct cmp

{

bool operator()( const int &a, const int &b ) const

{ 定义比较关系<}

};

(运算符重载,重载<)

set<ss> base; ( 创建一个元素类型是ss,名字是base的set )

注:定义了<,==和>以及>=,<=就都确定了,STL的比较关系都是用<来确定的,所以必须通     过定义< --“严格弱小于”来确定比较关

4,set的基本操作:

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()    返回一个用于比较元素间的值的函数

5,自定义比较函数:

For example:

#include<iostream>

#include<set>

using namespace std;

typedef struct {

int a,b;

char s;

}newtype;

struct compare   //there is no ().

{

bool operator()(const newtype &a, const newtype &b) const

{

return a.s<b.s;

}

};//the “; ”  is  here;

set<newtype,compare>element;

int main()

{

newtype a,b,c,d,t;

a.a=1; a.s='b';

b.a=2; b.s='c';

c.a=4; c.s='d';

d.a=3; d.s='a';

element.insert(a);

element.insert(b);

element.insert(c);

element.insert(d);

set<newtype,compare>::iterator it;

for(it=element.begin(); it!=element.end();it++)

cout<<(*it).a<<" ";

cout<<endl;

for(it=element.begin(); it!=element.end();it++)

cout<<(*it).s<<" ";

}

element自动排序是按照char s的大小排序的;

6.其他的set构造方法;

#include <iostream>

#include <set>

using namespace std;

bool fncomp (int lhs, int rhs) {return lhs<rhs;}

struct classcomp {

bool operator() (const int& lhs, const int& rhs) const

{return lhs<rhs;}

};

int main ()

{

set<int> first;                           // empty set of ints

int myints[]= {10,20,30,40,50};

set<int> second (myints,myints+5);        // pointers used as iterators

set<int> third (second);                  // a copy of second

set<int> fourth (second.begin(), second.end());  // iterator ctor.

set<int,classcomp> fifth;                 // class as Compare

bool(*fn_pt)(int,int) = fncomp;

set<int,bool(*)(int,int)> sixth (fn_pt);  // function pointer as Compare

return 0;

}

STL set和multiset相关推荐

  1. C++STL的set/ multiset容器

    C++STL的set/ multiset容器 set基本概念 set大小和交换 set插入和删除 set查找和统计 set和multiset区别 pair对组创建 set容器排序 set基本概念 简介 ...

  2. Multiset(中)——STL中的multiset

    Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...

  3. java multiset_C++ STL set和multiset

    1.简介 set 是关联容器的一种,是排序好的集合(元素已经进行了排序).set 和 multiset 类似,它和 multiset 的差别在于 set 中不能有重复的元素.multiset 的成员函 ...

  4. STL:set/multiset用法详解

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

  5. stl的set,multiset, map, multimap, deque, list, stack, queue, priority_queue

    set实际上是平衡二叉树,需要声明头文件#include<set> Insert:将元素插入集合中 使用前向迭代器对集合中序遍历 使用反向迭代器reverse_iterator可以反向遍历 ...

  6. STL学习笔记-- multiset

    multiset 多重集合容器 与 set 集合容器一样, multiset 多重容器也使用红黑树组织元素数据,只是 multiset 容器允许将重复的元素键值插入,而 set 容器则不允许.mult ...

  7. STL: set相关算法

    本节的四个算法所接受的set,必须是有序区间(sorted range),元素值可以重复出现.也就是说,他们可以接受STL的set/multiset容器作为输入区间. set_union Unites ...

  8. HDU-Yuna's confusion 树状数组 Or Multiset

    比赛的时候竟然没有想到这题可以用树状数组过,由于数字的区间比较小,所以直接开设一个树状数组,定义sum(i) 表示小于i的数的总数.那么判定一个数是否有的条件就是计算sum(i+1) == sum(i ...

  9. STL源码剖析 Set相关算法 并集 set_union|交集 set_intersection|差集 set_difference |对称差集 set_symmetric_difference

    注意事项 四种相关算法:并集.交集.差集.对称差集 本章的四个算法要求元素不可以重复并且经过了排序 底层接受STL的set/multiset容器作为输入空间 不接受底层为hash_set和hash_m ...

最新文章

  1. weblogic mime-type
  2. buu robomunication
  3. SQL Server 2014安装教程
  4. ITK:创建一个高斯分布
  5. CentOS 7运维管理笔记(5)----源代码安装Apache 2.4,搭建LAMP服务器
  6. wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]
  7. 国密算法和GmSSL介绍
  8. 【Love2d从青铜到王者】第一篇:Love2d入门以及安装教程
  9. mysql命令桌面壁纸_【upupoo动态桌面壁纸和mysql-jdbc.jar哪个好用】upupoo动态桌面壁纸和mysql-jdbc.jar对比-ZOL下载...
  10. Arquillian测试框架快速上手教程(四)- 使用Arquillian + Drone + Selenium + Graphene 进行Web自动化测试
  11. Product UVA - 10106(大数乘法)
  12. 【Paper-Attack】Graph Universal Adversarial Attacks: A Few Bad Actors Ruin Graph Learning Models
  13. Lambda将搬砖变成艺术
  14. c语言实现七巧板积木拼图大全,七巧板拼图积木的制作方法
  15. c #点击按钮下载excel文件
  16. Spring相关的配置
  17. 【Git】从安装配置到简单使用
  18. 全球及中国多晶硅产业竞争态势及发展前景研究报告2021-2027年
  19. 优麒麟linux共享文件夹,循序而渐进,熟读而精思——优麒麟文件管理器篇
  20. CSS中 定位position 和 transform 移动元素的比较

热门文章

  1. Linux指令小记(简明实用)
  2. C3P0连接池工具类使用
  3. Session(数据)共享的前后端分离Shiro实战
  4. javascript之Partial Application
  5. sicily 1012. Stacking Cylinders
  6. CentOS新增用户并授予sudo权限
  7. C语言:几种字符输入函数的区别
  8. 2014-7-29-阿里电面-第一轮
  9. Asp.net mvc 实时生成缩率图到硬盘
  10. MyEclipse/Eclipse 中使用javap