#include <set>
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>的更多相关文章
- 浅谈JSP中include指令与include动作标识的区别
JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...
- Entity Framework 6 Recipes 2nd Edition(13-9)译 -> 避免Include
问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...
- error RC1015: cannot open include file 'afxres.h' 解决办法
在为WindowsPhone8程序添加本地化的过程中遇到这个问题: 问题原因就是afxres.h文件缺失,下载它,放到VS安装目录下的VS\include目录下就可以了(选择目录的时候注意对应对版本) ...
- Mybatis常用总结:参数,返回,执行sql,include等
1.参数注入1.1用#{0},#{1}的形式,0代表第一个参数,1代表第二个参数 public List<RecordVo> queryList(String workerId, Inte ...
- jsp中的@include与jsp:include区别详解
1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include ...
- JSP中编译指令include与动作指令include的区别
include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改, 否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如 ...
- C/C++ 中的include
当需要使用已有的方法或库时, 可以将它们的头文件#include进来. #include会在preprocess过程中被替换成它包含的代码. 头文件中包含了需要使用的函数/变量的声明. 当然声明与定义 ...
- 织梦多语言站点,{dede:include filename=''/}引入问题
织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...
- PHP 站点相对包含,路径的问题解决方法(include,require)
以前看了,很多框架,基本上很少使用相对路径包含.而一般很多做php web站点,喜欢用相对路径. 认为这样,无论目录放到那里. 只要跟另外目录关系一致.那么就不会出现问题.如果一个站点,一般都认为,如 ...
- 如何让include标签包裹的布局置于屏幕最下方?
如何让一个Layout 始终在屏幕的下方 我想让<include layout="@layout/bottom" />一直在屏幕下,怎么做? 1.相对布局中用属性 a ...
随机推荐
- UESTC_Eight Puzzle 2015 UESTC Training for Search Algorithm & String<Problem F>
F - Eight Puzzle Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) ...
- UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- HTML5 Canvas Cheat Sheet
HTML5 Canvas Cheat Sheet HTML5 Canvas Cheat Sheet v1.x
- svn之——linux下清除svn的用户名和密码
问题:之前用的svn账号权限不够,需要使用别的账号,所以提出需求——怎么使用新的svn账号进行操作 方法一: linux下删除~/.subversion/auth即可清除之前的用户名和密码:rm -r ...
- SDK调试出错小技巧=。=
学习Unity小伙伴完全不懂Android编程抓错误是很困难的..... 1. 使用UnityPlayer.UnitySendMessage(); 发送到Unity使用OnGUI显示错误 2. 直接在 ...
- A Corrupt Mayor's Performance Art(线段树区间更新+位运算,颜色段种类)
A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100 ...
- paip.sql2k,sql2005,sql2008,sql2008 r2,SQL2012以及EXPRESS版本的区别
paip.sql2k,sql2005,sql2008,sql2008 r2,SQL2012以及EXPRESS版本的区别 作者Attilax , EMAIL:1466519819@qq.com 来源 ...
- 使用CSS达到阴阳八卦图等图形
CSS还是比較强大的,能够实现中国古典的"阴阳八卦图"等形状. 正方形 #rectangle { width: 200px; height: 100px; backgrount-c ...
- Android窗口管理服务WindowManagerService的简要介绍和学习计划
在前一个系列文章中,我们从个体的角度来分析了Android应用程序窗口的实现框架.事实上,如果我们从整体的角度来看,Android应用程序窗口的 实现要更复杂,因为它们的类型和作用不同,且会相互影响. ...
- mysql 5.7忘记密码处理
vi /etc/my.cnf在[mysqld]下面增加一行skip-grant-tables 重启 /etc/init.d/mysqld restart /usr/local/mysql/bin/m ...