当前位置: 首页 > news >正文

STL学习(?、set容器)

目录

一、构造和赋值

二、大小和交换

三、插入和删除

四、查找和统计

五、set和multiset的区别

六、pair的使用

七、指定set内置类型排序规则

八、指定set里面自定义数据类型的排序规则


一、构造和赋值

set容器是关联式容器,元素插入自动排序。

函数原型

set<T> st                      // 默认构造

set(const set & st)        // 拷贝构造

赋值

set& operator=(const set & st)    // 重载等号

二、大小和交换

函数原型

size();     // 返回容器中元素的数目

empty();  // 判断容器是否为空

swap();   // 交换两个集合容器

#include<iostream>
#include<set>
using namespace std;void print_set(set<int> my_set)
{for(auto i:my_set){cout<<i<<endl;}
}
void test2()
{   set<int> s;s.insert(1);s.insert(3);s.insert(2);if(s.empty()){cout<<"s is empty"<<endl;}else{cout<<"s is not empty"<<endl;cout<<"s size is:"<<s.size()<<endl;}set<int> s2;s2.insert(10);s2.insert(20);s2.insert(30);print_set(s2);s2.swap(s);print_set(s2);
}int main()
{test2();return 0;
}

三、插入和删除

insert(elem)   // 在容器中插入元素

clear()    // 清空容器所有元素

erase(pos)   // 删除pos迭代器所指的元素,返回下一个元素的迭代器

erase(begin,end)  // 删除【beigin,end)迭代器之间的元素,返回下一个元素的迭代器

erase(elme)     // 删除elme

四、查找和统计

函数原型

find(key)  // 查找key是否存在,若存在,返回该元素的迭代器,不存在返回set.end()

五、set和multiset的区别

set不可以插入重复元素,multiset可以。

六、pair的使用

函数原型

pair<type,type> p(value1, value2)

pair<type,type>p = make_pair(value1, value2)

七、指定set内置类型排序规则

#include<iostream>
#include<set>
#include<string>
#include<algorithm>
using namespace std;void print_set(set<int> my_set)
{for(auto i:my_set){cout<<i<<" ";}cout<<endl;
}
class ComPare
{public:bool operator()(int a,int b){return a>b;}
};
void test2()
{   set<int> s;s.insert(1);s.insert(3);s.insert(2);print_set(s);set<int,ComPare> s2;s2.insert(1);s2.insert(3);s2.insert(2);for(auto i:s2){cout<<i<<" ";}cout<<endl;
}int main()
{test2();return 0;
}

八、指定set里面自定义数据类型的排序规则

值得一提的是,对于自定义消息类型的set,必须手动指明排序规则,不然编译器报错,因为编译器也不知道怎么排。

#include<iostream>
#include<set>
#include<string>
#include<algorithm>
using namespace std;void print_set(set<int> my_set)
{for(auto i:my_set){cout<<i<<" ";}cout<<endl;
}
class Person
{public:Person(string name,int age){this->name=name;this->age=age;}string name;int age;
};
class ComPare
{public:bool operator()(const Person &a, const Person &b){return a.age>b.age;}
};void test2()
{   set<Person,ComPare> s2;s2.insert(Person("张三",18));s2.insert(Person("李四",19));s2.insert(Person("王五",20));for(auto i:s2){cout<<i.name<<" "<<i.age<<endl;}
}int main()
{test2();return 0;
}

http://www.dtcms.com/a/301967.html

相关文章:

  • 计算机毕业设计java在线二手系统的设计与实现 基于Java的在线二手交易平台开发 Java技术驱动的二手物品管理系统
  • 如何创建 Google 翻译桌面快捷方式
  • qt 心跳包
  • 【Linux篇】进程间通信:进程IPC
  • 搜索引擎高级搜索指令大全(Google、百度等浏览器通用)
  • R语言简介(附电子书资料)
  • 【kafka】消息队列
  • 深入Go并发编程:Channel、Goroutine与Select的协同艺术
  • Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
  • 生产力效能跃升 金士顿DDR5 5600内存
  • 【正序拆解整数】2022-9-18
  • 二、Linux文本处理与文件操作核心命令
  • 群晖Synology Drive:打造高效安全的私有云协作平台
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-点赞区间实现
  • 持续集成CI与自动化测试
  • 越野新王豹 5:以极致可靠性诠释“安全是最大的豪华”
  • 【免费可用】【提供源代码】对YOLOV11模型进行剪枝和蒸馏
  • Excel常用函数大全,非常实用
  • 重构vite.config.json
  • Jenkins vs GitLab CI/CD vs GitHub Actions在容器化部署流水线中的对比分析与实践指南
  • 云原生MySQL Operator开发实战(三):高级特性与生产就绪功能
  • CodeBuddy的安装教程
  • 优测推出HarmonyOS全场景测试服务,解锁分布式场景应用卓越品质!
  • 表征学习:机器认知世界的核心能力与前沿突破
  • 「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响?
  • 新能源行业B端极简设计:碳中和目标下的交互轻量化实践
  • C#与C++交互开发系列(二十六):构建跨语言共享缓存,实现键值对读写与数据同步(实践方案)
  • 电子电路原理学习笔记---第4章二极管电路---第3天
  • 墨者:SQL注入实战-MySQL
  • uni-datetime-picker兼容ios