set/multiset 的特性是所有元素会根据元素的值自动进行排序。set 是以 RB-tree(红黑树,平衡二叉树的一种)为底层机制,其查找效率非常好。set 容器中不允许重复元
素,multiset 允许重复元素。
我们可以通过 set 的迭代器改变元素的值吗?
答: 不行,因为 set 集合是根据元素值进行排序,关系到 set 的排序规则,如果任意改变 set 的元素值,会严重破坏 set 组织。
#include <iostream>
#include <set>
#include <list>
#include <string>
using namespace std; void PrintSet(set<int>& s)
{
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
} class mycompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;
}
}; // set初始化
// set<T> st;//set 默认构造函数:
// mulitset<T> mst; //multiset 默认构造函数:
// set(const set &st);//拷贝构造函数
void test01()
{
set<int> s1; // 自动进行排序, 默认从小到大
s1.insert();
s1.insert();
s1.insert();
s1.insert();
s1.insert();
PrintSet(s1);
// 赋值操作
// set& operator=(const set &st);//重载等号操作符
// swap(st);//交换两个集合容器
set<int> s2;
s2 = s1;
PrintSet(s2);
// 删除操作
// insert(elem);//在容器中插入元素。
// clear();//清除所有元素
// erase(pos);//删除 pos 迭代器所指的元素,返回下一个元素的迭代器。
// erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
// erase(elem);//删除容器中值为 elem 的元素。
s1.erase(s1.begin());
s1.erase();
PrintSet(s1);
cout << "----------------------" << endl;
} // set查找
// find(key);//查找键 key 是否存在,若存在,返回该键的元素的迭代器;若不存在,返回 map.end();
// lower_bound(keyElem);//返回第一个 key>=keyElem 元素的迭代器。
// upper_bound(keyElem);//返回第一个 key>keyElem 元素的迭代器。
// equal_range(keyElem);//返回容器中 key 与 keyElem 相等的上下限的两个迭代器。
void test02()
{
set<int> s1;
s1.insert();
s1.insert();
s1.insert();
s1.insert();
s1.insert();
set<int>::iterator ret = s1.find();
if (ret == s1.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "ret: " << *ret << endl;
}
// 找第一个大于key的值
ret = s1.upper_bound();
if (ret == s1.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "ret: " << *ret << endl;
}
// equal_range 返回Lower_bound 和 upper_bound值
pair<set<int>::iterator, set<int>::iterator> myret = s1.equal_range();
if (myret.first == s1.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "myret: " << *(myret.first) << endl;
}
if (myret.second == s1.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "myret: " << *(myret.second) << endl;
}
cout << "----------------" << endl;
} class Person
{
public:
Person(int age, int id) :id(id), age(age){}
public:
int id;
int age;
}; class mycompare2
{
public:
bool operator()(Person p1, Person p2)
{
if (p1.id == p2.id)
{
return p1.age > p2.age;
}
else
{
p1.id > p2.id;
}
}
}; void test03()
{
set<Person, mycompare2> sp;
Person p1(, ), p2(, ), p3(, );
sp.insert(p1);
sp.insert(p2);
sp.insert(p3);
Person p4(, );
for (set<Person, mycompare2>::iterator it = sp.begin(); it != sp.end(); it++)
{
cout << (*it).age << " " << (*it).id << endl;
}
set<Person, mycompare2>::iterator ret = sp.find(p4);
if (ret == sp.end())
{
cout << "没有找到!" << endl;
}
else
{
cout << "找到:" << (*ret).id << " " << (*ret).age << endl;
}
} // 对组 void test04()
{
// 构造方法
pair<int, int> pair1(, );
cout << pair1.first << " " << pair1.second << endl;
pair<int, string> pair2 = make_pair(, "aaaaa");
cout << pair2.first << " " << pair2.second << endl;
pair<int, string> pair3 = pair2;
} int main()
{
test01();
test02();
test03();
test04();
getchar();
return ;
}

C++ STL 之 set 和 pair的更多相关文章

  1. STL之map与pair与unordered_map常用函数详解

    STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称 ...

  2. stl(set和pair)

    D - 4 Gym - 100989D In this cafeteria, the N tables are all ordered in one line, where table number ...

  3. UVA 10763 Foreign Exchange 出国交换 pair+map

    题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a). 放在贪心这其实有点像检索. 用stl做,map+pair. 记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己 ...

  4. make_pair

    Utilities <utility> 由短小精干的类和函数构成,执行最一般性的工作. 这些工具包括: general types 一些重要的C函数 numeric limits Pair ...

  5. Codeforces Round 500 (Div 2) Solution

    从这里开始 题目地址 瞎扯 Problem A Piles With Stones Problem B And Problem C Photo of The Sky Problem D Chemica ...

  6. 【转】c++ make_pair函数使用

    [好记性不如烂笔头:在<C++ Templates>看到这个函数,发现正是前段时间写项目程序所要用到的,可惜当时还不知道有这个用法,当时是自己写了个结构体..]Utilities < ...

  7. C++11--Tuple类<tuple>

    #include "stdafx.h" #include <iomanip> #include <condition_variable> #include ...

  8. 洛谷 P1954 [NOI2010]航空管制

    https://www.luogu.org/problemnew/show/P1954 拓扑排序, 注意到如果正着建图("a出现早于b"=>"a向b连边" ...

  9. STL的pair学习, map学习

    http://blog.csdn.net/calvin_zcx/article/details/6072286 http://www.linuxidc.com/Linux/2014-10/107621 ...

随机推荐

  1. Redis查询_Tips

    基础知识——介绍 Redis简介 REmote Dictionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个完全 ...

  2. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_09-修改页面-服务端-接口开发

    需要写两个接口 api的接口内定义两个方法.修改的地方单独传了id @ApiOperation("根据页面id查询页面信息") public CmsPage findById(St ...

  3. CPU密集型、IO密集型

    CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/ ...

  4. python md5验签

    import hashlib #api验签 参数按首字母排序,然后拼接clientid=123456&num=xxxx&status=1&timestamp=157319776 ...

  5. 使用 bash 脚本把 AWS EC2 数据备份到 S3

    目录 一.IAM 秘钥授权方式(普通) 1.1.打开 IAM 1.2.添加用户 1.3.安装和配置 AWS CLI 1.4.配置授权 二.IAM 角色授权方式(安全) 2.1.创建一个 EC2 访问 ...

  6. XSS 攻击的预防

    XSS 攻击有两大要素: 1.攻击者提交恶意代码. 2.浏览器执行恶意代码. 针对第一个要素:我们是否能够在用户输入的过程,过滤掉用户输入的恶意代码呢? 输入过滤 在用户提交时,由前端过滤输入,然后提 ...

  7. Windows10系统Python2.7通过Swig调用C++过程

    我用的 python版本是2.7.12: Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit ...

  8. Matlab JPEG详细介绍

    作为一个基本的图像压缩方式,JPEG 已经得到了广泛的运用,但 JPEG 相关的基本原理,却经常被忽视,或解释得很不确切.这里我们详细讨论一下 JPEG 的编码原理,并结合实例来给出一个更加感性的认识 ...

  9. redis的发布和订阅操作

  10. POJ2513 【并查集+欧拉路径+trie树】

    题目链接:http://poj.org/problem?id=2513 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total ...