C++ STL容器值set

/*
3.7.2 set常用API
3.7.2.1 set构造函数
set<T> st;//set默认构造函数:
mulitset<T> mst; //multiset默认构造函数: 
set(const set& st);//拷贝构造函数
3.7.2.2 set赋值操作
set & operator=(const set & st);//重载等号操作符
swap(st);//交换两个集合容器
3.7.2.3 set大小操作
size();//返回容器中元素的数目
empty();//判断容器是否为空3.7.2.4 set插入和删除操作
insert(elem);//在容器中插入元素。
clear();//清除所有元素
erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(elem);//删除容器中值为elem的元素。
*/
#include <iostream>
#include <string>
#include <set>
using namespace std;void printSetInt(set<int> &s) {for (set<int>::iterator it = s.begin(); it != s.end(); ++it) {cout << (*it) << endl;}
}
void test1() {//set 是关联式容器, 关联式容器在插入的时候自动排好序// 序列式容器, 怎么插入的就怎么排序set<int> s1;s1.insert(5);s1.insert(3);s1.insert(1);s1.insert(7);s1.insert(9);printSetInt(s1);if (s1.empty()) {cout << "s1 is empty" << endl;}else {cout << "s1 size of " << s1.size() << endl;}s1.erase(s1.begin());s1.erase(3);printSetInt(s1);
}
/*
3.7.2.5 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 test2() {set<int> s1;s1.insert(5);s1.insert(3);s1.insert(1);s1.insert(7);s1.insert(9);set<int>::iterator pos = s1.find(3);if (pos!=s1.end()) {cout << "找到了 值为" << (*pos) << endl;}else {cout << "未找到" << endl;}int num = s1.count(1); cout << "1 的个数为" << num << endl;set<int>::iterator lb = s1.lower_bound(3);if (lb != s1.end()) {cout << "lower_bound(3) 为" << *lb << endl;} else {cout << "未找到" << endl;}set<int>::iterator ub = s1.upper_bound(3);if (ub != s1.end()) {cout << "upper_bound(3) 为" << *ub << endl;}else {cout << "未找到" << endl;}pair<set<int>::iterator, set<int>::iterator> er = s1.equal_range(3);if (er.first != s1.end()) {cout << "找到 s1.equal_range(3)的lower_bound为" << *(er.first) << endl;} else {cout << "未找到" << endl;}if (er.second != s1.end()) {cout << "找到 s1.equal_range(3)的upper_bound为" << *(er.second) << endl;}else {cout << "未找到" << endl;}
}// 创建pair的方式   对组
void test3() {//第一种pair<string, int> p(string("Tom"), 10);// 取值cout << "name is " << p.first << endl;cout << "age is " << p.second << endl;//第二种pair<string, int> p2 = make_pair("Jerry", 15);// 取值cout << "name is " << p2.first << endl;cout << "age is " << p2.second << endl;
}void test4() {// set容器不允许插入重复的值set<int> s1;pair<set<int>::iterator, bool> ret = s1.insert(10);if (ret.second) {cout << "10 插入成功" << endl;} else {cout << "10 插入失败" << endl;}pair<set<int>::iterator, bool> ret2 = s1.insert(10);if (ret2.second) {cout << "10 插入成功" << endl;}else {cout << "10 插入失败" << endl;}
}//仿函数
class MySort {
public:bool operator()(int v1, int v2) const {return v1 > v2;}
};void printSetIntSort(set<int, MySort> &s) {for (set<int>::iterator it = s.begin(); it != s.end(); ++it) {cout << (*it) << endl;}
}
// set容器排序
void test5() {// <> 里面,第二个参数可以指定排序规则,但是因为<>需要类型,所以这里需要用到仿函数set<int, MySort> s1;s1.insert(5);s1.insert(3);s1.insert(1);s1.insert(7);s1.insert(9);printSetIntSort(s1);
}//set 插入自定义数据类型
class Person {
public:Person(string name, int age) {this->m_name = name;this->m_age = age;}string m_name;int m_age;/*bool operator== (Person& p1) {if (this->m_age==p1.m_age && this->m_name == p1.m_name) {return true;}return false;}*/
};//自定义数据类型指定排序规则时所有成员都得是const成员
class compare01
{
public:bool operator()(const Person& p1, const Person& p2)const{return p1.m_age > p2.m_age;}
};void test6() {set<Person, compare01> s1; Person p1("大娃", 25);Person p2("二娃", 20);Person p3("五娃", 15);Person p4("三娃", 22);Person p5("爷爷", 55); // 这里如果爷爷的年龄和大娃一样,就无法插入到s1,当中, 应该用的是年龄做判断s1.insert(p1);s1.insert(p2);s1.insert(p3);s1.insert(p4);s1.insert(p5);for (set<Person>::iterator it1 = s1.begin(); it1 != s1.end(); ++it1) {cout << "name is " << (*it1).m_name << " age is" << (*it1).m_age << endl;}cout << "-----" << endl;//s1.erase(p5);for (set<Person>::iterator it1 = s1.begin(); it1 != s1.end(); ++it1) {cout << "name is " << (*it1).m_name << " age is" << (*it1).m_age << endl;}Person p6("三娃", 22);cout << "-----" << endl;s1.erase(p6); // Person类就算没有重载 == 运算符,也能把三娃删除掉// set容器删除元素,判断是否相等, 是通过compare01来判断的for (set<Person>::iterator it1 = s1.begin(); it1 != s1.end(); ++it1) {cout << "name is " << (*it1).m_name << " age is" << (*it1).m_age << endl;}
}
int main()
{//test1();//test2();//test3();//test4();	//test5();test6();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ STL容器之map 简单使用

3.8.2.1 map构造函数 map<T1, T2> mapTT;//map默认构造函数: map(const map &mp);//拷贝构造函数3.8.2.2 map赋值操作 map& operator(const map &mp);//重载等号操作符 swap(mp);//交换两个集合容器3.8.2.3 map大小操作 size();//返回容器中元素的数目 empty…

Manacher算法图解

看了好久的Manacher算法&#xff0c;觉得还是要自己画一遍&#xff0c;自己把代码写一遍才能理解 下面分享一下&#xff0c;如果有错&#xff0c;希望指正 简陋版本的&#xff0c;但是他基本只是做到了求取最长回文字符串&#xff0c;严格来说它并不是Manacher’s Algorithm-…

Flink 客户端操作命令及可视化工具

Flink提供了丰富的客户端操作来提交任务和与任务进行交互。下面主要从Flink命令行、Scala Shell、SQL Client、Restful API和 Web五个方面进行整理。 在Flink安装目录的bin目录下可以看到flink&#xff0c;start-scala-shell.sh和sql-client.sh等文件&#xff0c;这些都是客户…

ySQL挑战搭建一个简易的成绩管理系统的数据库

文章为自己搜索网上资源&#xff0c;再在这里进行整理&#xff0c;所以标注为转载 [实验步骤](https://www.shiyanlou.com/courses/reports/1347700) 总结做实验注意事项&#xff1a; 1.添加主键 2.主键和外键的关系 3.注意自增的书写添加 mysql 如何修改、添加、删除表主键…

网络之DNS协议图解

DNS是计算机域名系统 (Domain Name System) 域名系统采用类似目录树的等级结构。 域名服务器是指保存有该网络中所有主机的域名和对应IP地址&#xff0c;并具有将域名转换为IP地址功能的服务器。 域名服务器为客户机/服务器模式中的服务器方&#xff0c;它主要有两种形式&am…

C++ 谓词,

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> using namespace std;class GreaterThen20 { public:bool operator()(int val){return val > 20;} };//一元谓词 void test01() {vector<int>v;v.push…

网络之ARP

地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机&#xff0c;并接收返回消息&#xff0c;以此确定目标的物理地址…

C++ 内建函数对象

STL内建了一些函数对象。分为:算数类函数对象,关系运算类函数对象&#xff0c;逻辑运算类仿函数。这些仿函数所产生的对象&#xff0c;用法和一般函数完全相同&#xff0c;当然我们还可以产生无名的临时对象来履行函数功能。使用内建函数对象&#xff0c;需要引入头文件 functi…

网络之ICMP协议

ICMP 主要功能&#xff1a; 确认IP包是否成功送达目标地址通知在发送过程当中IP包被废弃的具体原因改善网络设置等 在IP通信中如果某个IP包因为某种原因未到达目标地址&#xff0c;那么这个原因由ICMP通知。 过程&#xff08;图解TCP/IP&#xff09; ICMP类型 常见的&am…

C++ 常用算法之遍历

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <functional> using namespace std;/* 遍历算法 遍历容器元素 param beg 开始迭代器 param end 结束迭代器 param _callback 函数回调或者函数…

网络之NAT协议

由来&#xff1a; 2011年2月3日中国农历新年&#xff0c; IANA对外宣布&#xff1a;IPv4地址空间最后5个地址块已经被分配给下属的5个地区委员会。2011年4月15日&#xff0c;亚太区委员会APNIC对外宣布&#xff0c;除了个别保留地址外&#xff0c;本区域所有的IPv4地址基本耗尽…

C++ 常用查找算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> using namespace std; #include <vector> #include <string> #include <functional> /* find算法 查找元素 param beg 容器开始迭代器 param end 容器结束迭代器 para…

CentOS7卸载并安装mysql教程

MySQL安装 先卸载其他 删除Mysql yum remove mysql mysql-server mysql-libs mysql-server;find / -name mysql 将找到的相关东西delete掉(rm -rf /var/lib/mysql)&#xff1b;rpm -qa|grep mysql(查询出来的东东yum remove掉) rm /etc/my.cnf查看是否还有mysql软件&#x…

C++ 常用排序算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <algorithm> #include <vector> #include <functional> #include <ctime> /* merge算法 容器元素合并&#xff0c;并存储到另一容器中 这两个容器 必须也是…

排序稳定性的意义

首先&#xff0c;为什么会有排序算法稳定性的说法&#xff1f;只要能排好不就可以了吗&#xff1f; 看例子 第1行是数字2 记作 1 2 第2行是数字4 记作 2 4 第3行是数字2 记作 3 2 排序后的结果&#xff08;如果看不懂命令的意思&#xff0c;参照这个博客&#xff09; 那么引入…

C++ 常用拷贝和替换算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std;/* copy算法 将容器内指定范围的元素拷贝到另一容器中 param beg 容器开始迭代器 param end 容器结束迭代器 p…

防火墙的基础知识入门

文章目录防火墙基于实现方式&#xff0c;防火墙的发展分为四个阶段:Linux 环境中主要的防火墙形式TCP wrappers~~详解~~ 粗解Tcp wrappers的认识它的基本过程是这样的&#xff1a;iptable攻击和防御DDOS 攻击常见的可能受到 DDOS 攻击体现的症状有&#xff1a;而常见的 DDOS 攻…

C++ 常用算数生成算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> using namespace std; #include <algorithm> //不好使 #include <numeric> //好使 #include <iterator> /* accumulate算法 计算容器元素累计总和 param beg 容器开始迭代…

fork()请问下面的程序一共输出多少个“A”?多少个-?

题目&#xff1a;请问下面的程序一共输出多少个“-”&#xff1f; #include #include #include int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } return 0; } 解析&#xff1a;一共输出8个。 首先程序一开始&am…

C++ 常用集合算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std;/* set_intersection算法 求两个set集合的交集 注意:两个集合必须是有序序列 param beg1 容器1开始迭代器 par…