#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 ...
随机推荐
- poj 1088 动态规划+dfs(记忆化搜索)
滑雪 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Description Mi ...
- 【POJ 2010 Moo University-Financial Aid】优先级队列
题目链接:http://poj.org/problem?id=2010 题意:C只牛犊,各有自己的分数score和申请的补助aid,现要选出N只(N为奇数),使得其aid的总和不超过F,且按score ...
- 安全运维之:Linux系统账户和登录安全
一.合理使用Shell历史命令记录功能 在Linux下可通过history命令查看用户所有的历史操作记录,同时shell命令操作记录默认保存在用户目录下 的.bash_history文件中,通过这个文 ...
- 格而知之7:我所理解的Runtime(2)
消息发送(Messaging) 8.以上便是runtime相关的一些数据结构,接下来我们回看一开始的疑问: objc_msgSend()函数在执行的过程中是如何找到对应的类,找到对应的方法实现的呢? ...
- 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...
- [置顶] Android开发实战记录(三)---HelloWorld
1.新建Android项目,选择Android Project,然后Next 2.填写项目名称HelloWorld然后next,这里注意下,Java开发的命名规范 3.选择Android SDK版本, ...
- GCC、GDB、Makefile
1.GCC程序编译 Linux系统下的gcc(GNUCCompiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一 ...
- Java - 反射机制(Reflection)
Java - 反射机制(Reflection) > Reflection 是被视为 动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的 ...
- js页面换行与空格
1.换行 +'<br/>\n': 2.空格 1#JS——输出内容document.write#用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容.1.输出内容用“”括起, ...
- Entity Framework排序
public ActionResult Index() { using (ApplicationDbContext db = new ApplicationDbContext()) { //var l ...