1 multiset

多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

2 set

集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>

1 count

统计数量

2 equal_range(const T&);找到红黑树的链表结点,遍历所有的元素

3 find();查找元素

4 insert(const T&);插入

5 size();返回当前向量中已经存放的对象的个数

1 multiset

多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

 #include <iostream>
#include <set> int main()
{
std::multiset<int>myset; myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();//和set不同,元素可以重复 auto ib = myset.begin();
auto ie = myset.end(); for (; ib != ie; ib++)
{
std::cout << *ib << std::endl;
printf("%p,%p\n", ib._Ptr, ib);//智能指针
} return ;
}

multiset每一个结点都是一个链表,set每个结点是一个结点而已

 #include <iostream>
#include <set> struct student
{
int id;
char name[];
}; struct stuless
{
bool operator()(const student &s1, const student &s2)//重载()
{
return s1.id < s2.id;
}
}; int main()
{
student sarray[] = { {,"hello"},{ ,"world" },{ ,"hello world" } };
std::multiset<student, stuless>myset(sarray, sarray + , stuless());//multiset每一个结点都是一个链表,set每个结点是一个结点而已 student stu1 = { ,"world hello" }; myset.insert(stu1);//插入 auto ib = myset.begin();
auto ie = myset.end(); for (; ib != ie; ib++)
{
std::cout << ib->id << " " << ib->name << std::endl;
} return ;
}

multiset的元素可以重复,因此equal_range(const T&);可以实现查找多个相同的元素

 #include <iostream>
#include <set> void main()
{
std::multiset<int>myset; myset.insert();//插入
myset.insert();
myset.insert();
myset.insert();
myset.insert(); auto pfind = myset.find();//find只查找一个元素
std::cout << *pfind << std::endl << std::endl; auto allfind = myset.equal_range();//equal_range找到红黑树的链表结点,遍历所有的元素 for (auto it = allfind.first; it != allfind.second; it++)//first是链表的头结点,second是最后一个空结点
{
std::cout << *it << std::endl;
}
}

count

 1 #include <iostream>
2 #include <set>
3
4 void main()
5 {
6 std::multiset<int>myset;
7
8 myset.insert(3);
9 myset.insert(1);
10 myset.insert(2);
11 myset.insert(1);
12 myset.insert(2);
13 myset.insert(1);
14 myset.insert(2);
15 myset.insert(1);
16
17 int i = 0;
18 for (auto ib = myset.begin(), ie = myset.end(); ib != ie; ib++)
19 {
20 i++;
21 }
22
23 std::cout << i << std::endl;//打印结点数量
24
25 std::cout << count(myset.begin(), myset.end(), 1);//打印结点元素是1的数量
26 }

multiset可以自动排序

 #include <iostream>
#include <algorithm>
#include <set> template <class T>
struct show
{
public:
void operator()(T &t)
{
std::cout << t << " ";
}
}; void main()
{
std::multiset<int>myset; myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert(); for_each(myset.begin(), myset.end(), show<const int>());
}

2 set

集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>

find();查找元素

size();返回当前向量中已经存放的对象的个数

 #include <iostream>
#include <set> void main()
{
std::set<int>myset;//红黑树 myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();//如果插入的元素已经存在,将会放弃插入 auto ib = myset.begin();
auto ie = myset.end(); for (; ib != ie; ib++)//即使插入的顺序是乱序,但是也会按从小到大的顺序输出
{
std::cout << *ib << std::endl;
}
}

find查找元素

 #include <iostream>
#include <set> void main()
{
std::set<int>myset;//红黑树 myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert(); auto findpos = myset.find(); std::cout << *findpos << std::endl;
}

size();返回当前向量中已经存放的对象的个数

 #include <iostream>
#include <set> void main()
{
std::set<int>myset;//红黑树 myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();
myset.insert();//如果插入的元素已经存在,将会放弃插入 std::cout << myset.size() << std::endl;//返回当前向量中已经存放的对象的个数
}

红黑树,处理纯数字非常少,处理类对象以及字符串

pari起到获取插入返回值,第一个类型,类型比大小的方式

 #include <iostream>
#include <set>
#include <string> struct strless
{
bool operator()(const char *str1, const char *str2)//重载()
{
return strcmp(str1, str2) < ;
}
}; //红黑树,处理纯数字非常少,处理类对象以及字符串 int main()
{
const char *cmd[] = { "abc", "calc", "notepad", "const", "xyz", "ghi" }; std::set<const char *, strless>myset(cmd, cmd + , strless());//构造
myset.insert("");//插入
myset.insert(""); std::pair<std::set<const char *>::iterator, bool>p = myset.insert("");//pari起到获取插入返回值,第一个类型,类型比大小的方式 auto ib = myset.begin();
auto ie = myset.end(); for (; ib != ie; ib++)//迭代器访问
{
std::cout << *ib << std::endl;
}
std::cout << std::endl; auto rb = myset.rbegin();
auto re = myset.rend(); for (; rb != re; rb++)//反向迭代器访问
{
std::cout << *rb << std::endl;
}
std::cout << std::endl; std::set<const char *, strless>::iterator pfind = myset.find("calc");//查找
std::cout << *pfind << std::endl; return ;
}

#include <set>的更多相关文章

  1. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  2. Entity Framework 6 Recipes 2nd Edition(13-9)译 -> 避免Include

    问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...

  3. error RC1015: cannot open include file 'afxres.h' 解决办法

    在为WindowsPhone8程序添加本地化的过程中遇到这个问题: 问题原因就是afxres.h文件缺失,下载它,放到VS安装目录下的VS\include目录下就可以了(选择目录的时候注意对应对版本) ...

  4. Mybatis常用总结:参数,返回,执行sql,include等

    1.参数注入1.1用#{0},#{1}的形式,0代表第一个参数,1代表第二个参数 public List<RecordVo> queryList(String workerId, Inte ...

  5. jsp中的@include与jsp:include区别详解

    1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include ...

  6. JSP中编译指令include与动作指令include的区别

    include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改, 否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如 ...

  7. C/C++ 中的include

    当需要使用已有的方法或库时, 可以将它们的头文件#include进来. #include会在preprocess过程中被替换成它包含的代码. 头文件中包含了需要使用的函数/变量的声明. 当然声明与定义 ...

  8. 织梦多语言站点,{dede:include filename=''/}引入问题

    织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...

  9. PHP 站点相对包含,路径的问题解决方法(include,require)

    以前看了,很多框架,基本上很少使用相对路径包含.而一般很多做php web站点,喜欢用相对路径. 认为这样,无论目录放到那里. 只要跟另外目录关系一致.那么就不会出现问题.如果一个站点,一般都认为,如 ...

  10. 如何让include标签包裹的布局置于屏幕最下方?

    如何让一个Layout 始终在屏幕的下方 我想让<include layout="@layout/bottom" />一直在屏幕下,怎么做? 1.相对布局中用属性  a ...

随机推荐

  1. Candy 解答

    Question There are N children standing in a line. Each child is assigned a rating value. You are giv ...

  2. LD1-M(简单图的判定+构造,Havel定理)

    题目链接 /* *题目大意: *给出一个图的每个点的度的序列,求能否构成一个简单图,如果能构出简单图,则输出图的邻接矩阵; * *算法思想: *Havel定理的应用; *给定一个非负整数序列{dn}, ...

  3. find -exec

    find -exec 的标准写法 find ./ -name "*.tmp" -exec rm -rf "{}" \; find -exec 这个命令组合很好用 ...

  4. UGUI Silder

    来我们看看这个像温度计的控件, 比如音量面板声音大小的控制.它是一个组合型控件由多个Image 和一个Slider组合而成 它的核心是Slider组件实现的. 简单介绍下Slider组件的属性: Fi ...

  5. C#listbox使用方法

    1. 属性列表: SelectionMode    组件中条目的选择类型,即多选(Multiple).单选(Single)    Rows             列表框中显示总共多少行    Sel ...

  6. yarn状态机的可视化

    YARN为了实现多个状态机的对象,控制ResourceManager中间RMAppImpl.RMApp-AttemptImpl.RMContainerImpl和RMNodeImpl,NodeManag ...

  7. 3第一周课后练习&#183;阅读计划(3)-使用函数来访问私有数据成员

    /* * Copyright (c) 2015, 计算机科学学院,烟台大学 * All rights reserved. * 文件名:test.cpp * 作 靠:刘畅 * 完成日期:2015年 3 ...

  8. for循环、穷举法和迭代

    循环:初始条件,循环条件,状态改变,循环体.for(初始条件;循环条件;状态改变){ 循环体}for(int i=1;i<=10;i++){ }例子:100以内与7有关的数.求100以内所有数的 ...

  9. (原)前端知识杂烩(css系列)

    更新于 20160217 1. css hack .pad{ padding:17px 0 0 17px; /* 普通写法 */ *padding:17px 0 0 17px; /* *为IE7 *+ ...

  10. Foundation--NSDictionary+NSMutableDictionary

    键值对 key(一般为字符串对象)---vaule(必须是对象) Person *p1 =[[Person alloc ]init]; Person *p2 =[[Person alloc ]init ...