set容器,容器内部将数据自动排序(平衡二叉树),不能插入重复元素。multiset可以插入重复元素。不能修改容器中的值,通过删除值,在插入。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<set>
#include<string>
#include<algorithm>
using namespace std; struct MyComapre{
bool operator()(int v1, int v2){
return v1 > v2;
}
}; void printMySet(set<int, MyComapre> &s){ for (set<int, MyComapre>::iterator it = s.begin(); it != s.end(); ++it){
cout << *it << " ";
}
cout << endl;
} //1.
/*
set<T> st;//set默认构造函数:
mulitset<T> mst; //multiset默认构造函数:
set(const set &st);//拷贝构造函数 insert(elem);//在容器中插入元素。
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem);//删除容器中值为elem的元素。 */ void test01(){ set<int, MyComapre> s;
s.insert(4);
pair<set<int, MyComapre>::iterator, bool> ret = s.insert(2);
if (ret.second){
cout << "第一次插入成功!" << endl;
}
else{
cout << "第一次插入失败!" << endl;
}
s.insert(3);
s.insert(9);
s.insert(6); ret = s.insert(2);
if (ret.second){
cout << "第一次插入成功!" << endl;
}
else{
cout << "第一次插入失败!" << endl;
} //删除第一个元素的
s.erase(2);
s.erase(s.begin());
//set容器迭代器什么类型?双向迭代器 printMySet(s);
} void print(const int &val){
cout << val << " ";
} void test02(){ multiset<int> ms;
ms.insert(7);
ms.insert(4);
ms.insert(9);
ms.insert(2);
ms.insert(10);
ms.insert(2); for_each(ms.begin(), ms.end(), print);
cout << endl;
} //3. set查找操作
/*
find(key);//查找键key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);//查找键key的元素个数
lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
*/ void test03(){ set<int> s;
s.insert(1);
s.insert(2);
//s.insert(3);
s.insert(4);
s.insert(5); set<int>::iterator it = s.find(12);
if (it == s.end()){
cout << "查找失败!" << endl;
}
else{
cout << "查找到的值是:" << *it << endl;
} cout << "值为2的元素有:" << s.count(12) << "个!" << endl; //lower_bound upper_bound
it = s.lower_bound(2);
if (it == s.end()){
cout << "查找失败!" << endl;
}
else{
cout << "查找到的值是:" << *it << endl;
} it = s.upper_bound(2);
if (it == s.end()){
cout << "查找失败!" << endl;
}
else{
cout << "查找到的值是:" << *it << endl;
}
cout << "------------------------" << endl; pair<set<int>::iterator, set<int>::iterator> ret = s.equal_range(2);
cout << *(ret.first) << endl;
cout << *(ret.second) << endl; } //自定义数据类型
class Person{
public:
Person(string name,int age){
this->mName = name;
this->mAge = age;
}
public:
string mName;
int mAge;
}; struct PersonRule{
bool operator()(const Person &p1,const Person &p2){
return p1.mAge > p2.mAge;
}
}; void test04(){ set<Person, PersonRule> s; s.insert(Person("aaa", 10));
s.insert(Person("bbb", 70));
s.insert(Person("ccc", 50));
s.insert(Person("ddd", 30));
s.insert(Person("eee", 40)); for (set<Person, PersonRule>::iterator it = s.begin(); it != s.end();++it){
cout << "Name:" << it->mName << " Age:" << it->mAge << endl;
} cout << "----------------------" << endl; //!PersonRule()(p1, p2) && !PersonRule()(p2, p1) set<Person, PersonRule>::iterator it = s.find(Person("aaa", 20));
if (it == s.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Name:" << it->mName << " Age:" << it->mAge << endl;
} } int main(){ //test01();
//test02();
//test03();
test04(); system("pause");
return EXIT_SUCCESS;
}

STL set容器常用API的更多相关文章

  1. STL map容器常用API

    map容器:键值和实值是分开的,排序规则按照键值排序 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<map& ...

  2. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  3. 2.4 C++STL deque容器详解

    文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...

  4. STL vector常用API

    1.容器:序列容器(时间决定).关联式容器(容器中的数据有一定规则) 2.迭代器:通过迭代器寻找.遍历容器中的数据 vetor的使用:数据遍历与输出 #define _CRT_SECURE_NO_WA ...

  5. C++ STL中的常用容器浅谈

    STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...

  6. 深入解析C++ STL中的常用容器

    转载:http://blog.csdn.net/u013443618/article/details/49964299 这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中的 ...

  7. Set容器——HashSet及常用API

    Set容器特点: ①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序; ②   最常用的两个Set接口的实 ...

  8. Map容器——TreeMap及常用API,Comparator和Comparable接口

    TreeMap及常用API ①   TreeMap类通过使用红黑树实现Map接口; ②   TreeMap提供按排序顺序存储键/值对的有效手段,同时允许快速检索; ③   不像散列(HashMap), ...

  9. List容器——LinkedList及常用API,实现栈和队列

    LinkedList及常用API ①   LinkedList----链表 ②   LinkedList类扩展AbstractSequentialList并实现List接口 ③   LinkedLis ...

随机推荐

  1. Wine 安装迅雷5.8.14.176

    测试过的系统版本:Kubuntu 22.04 测试过的Wine版本 Wine7.8 程序下载地址: https://pan.baidu.com/s/1pSgunVH3WtACssX5we3DdQ 提取 ...

  2. 利用POI遍历出层级结构的excel表格

    import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.util.CellRangeAddress; p ...

  3. flinksql读写redis

    0.前言 最近有个需求,需要使用flinksql读写redis,由于官网上并没有redis的connector,在网上找了很久,开源的几个connector又没法满足要求,所有这里就自己动手实现了一个 ...

  4. super关键字的使用

    1.super理解为:父类的 2.super可以用来调用:属性.方法.构造器 3.super的使用:调用属性和方法 3.1 我们可以在子类的方法或构造器中.通过使用"super.属性&quo ...

  5. 33.ModelSerializer详解

    ModelSerializer特点 根据Model模型的定义,自动生成字段 自动生成相应的验证器 实现create和update 自动默认将关系字段映射成PrimaryKeyRelatedField主 ...

  6. 使用rsync向服务器迁移大文件

    场景 本人将12G本地单文件(12G大小h5文件数据集)向Linux服务器进行大文件上传时传输失败.最初使用 scp 命令或 rsync 直接对大文件进行传输,会出现网络断开或服务器端管道破裂情况,而 ...

  7. 2022,一个Java程序猿的外设配置

    工欲善其事,必先利其器. 是的没错,我就是个器材党,哈哈.正赶上搬家布置了新桌面,经过我的精心挑选和安装,也是凑齐了我新一套的桌面外设.写下来记录一下. 键盘 套件:腹灵MK870 轴体:佳达隆G白P ...

  8. Burpsuite(科学版)安装教程

    前言 BurpSuite是一款用于攻击web 应用程序的集成平台,在安全圈被称作"抓包神器".本文主要讲解 BurpSuite破解版的安装教程. 配置环境变量 BurpSuite是 ...

  9. 使用 html2canvas 将页面中某一部分转为图片下载

    今天在项目中遇到一个需求是将生成的二维码和一些背景作为海报,然后将海报以图片的形式下载 使用了 html2canvas  插件 import html2canvas from "html2c ...

  10. 使用@Transactional注解的方法所在的类获取不到注解的解决方案

    前段时间遇到一个问题,一个service叫做A吧,有多个实现类分别是B,C,D,需要根据前端传的不同参数去匹配不同的实现类,我就自定义了一个注解@OrderDeal放在B,C,D上面,然后匹配前端传的 ...