#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 ...
随机推荐
- 项目中Spring注入报错小结
之前在做单元测试时采用注解方式进行service对象的注入,但运行测试用例时对象要注入的service对象总是空的,检查下spring配置文件,我要配置的bean类xml文件已经包含到spring要加 ...
- textContent、innerText 以及Event事件兼容性问题
今天在完成前端的简单练习时发现了一些兼容性的问题,百度后得以解决. 这里主要讨论Firefox与Chrome的兼容性问题. textContent与 innerText 在javascript中, 为 ...
- 代码中实际运用memcached——java
以下文章取自:http://jameswxx.iteye.com/blog/1168711 memcached的java客户端有好几种,http://code.google.com/p/memcach ...
- char与byte的差别
非常多刚開始学习的人(包含我,已经学了一年多java了)肯会对char和byte这两种数据类型有所疑惑,相互混淆,今天特地查了好多资料,对byte和char两种数据类型进行了总结和比較,先将结果与大家 ...
- iOS蓝牙4.0开发例子
1建立中心角色 1 2 3 #import <CoreBluetooth/CoreBluetooth.h> CBCentralManager *manager; manager = [ ...
- MySQL中innodb表主键设计原则
主键设计的原则:1. 一定要显式定义主键2. 采用与业务无关的单独列3. 采用自增列4. 数据类型采用int,并尽可能小,能用tinyint就不用int,能用int就不用bigint5. 将主键放在表 ...
- 【筛素数表证明】【O[n]】
void get_prime() { int cnt = 0; for (int i = 2; i < N; i++) { if (!tag[i]) p[cnt++] = i; for (int ...
- C# winfrom 模拟ftp文件管理
从网上找到的非常好用的模拟ftp管理代码,整理了一下,希望对需要的人有帮助 using System; using System.Collections.Generic; using System.T ...
- photoswipe
allowUserZoom: 允许用户双击放大/移动方式查看图片. 默认值 = trueautoStartSlideshow: 当PhotoSwipe激活后,自动播放幻灯片. 默认值 = falsea ...
- JSP 基础之 JSTL <c:forEach>用法
在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JST ...