C++的set重载运算符

转载: https://www.cnblogs.com/zhihaospace/p/12843802.html

set 容器模版需要3个泛型参数,如下:

template class set;

第一个T 是元素类型,必选;

第二个C 指定元素比较方式,缺省为 Less, 即使用 < 符号比较;

第三个A 指定空间分配对象,一般使用默认类型。

因此:

(1) 如果第2个泛型参数你使用默认值的话,你的自定义元素类型需要重载 < 运算操作;

(2)如果你第2个泛型参数不使用默认值的话,则比较对象必须具有 () 操作,即:

bool operator()(const T &a, const T &b)

例子:

//https://www.acwing.com/problem/content/submission/code_detail/8671714/

#include

#define PII pair

using namespace std;

const int N = 2e5 + 10;

int a[N], b[N], p[N], c[N], ans[N];

int n, m;

struct cmp {

bool operator() (int a, int b) const {

return p[a] < p[b];

}

};

set s[4];

bool st[N];

int main() {

ios::sync_with_stdio(false);

cin.tie(nullptr);

cin >> n ;

for(int i = 0; i < n; i ++ ) {

cin >> p[i];

}

for(int i = 0; i < n; i ++ ) {

cin >> a[i];

s[a[i]].insert(i);

}

for(int i = 0; i < n; i ++ ) {

cin >> b[i];

s[b[i]].insert(i);

}

cin >> m;

for(int i = 0; i < m; i ++ ) cin >> c[i];

for(int i = 0; i < m; i ++ ) {

int x = c[i];

bool flag = false;

while(1) {

if(s[x].empty()) break;

int res = *s[x].begin(); s[x].erase(res);

if(st[res]) continue;

else {

st[res] = true;

cout << p[res] << ' ';

flag = true;

break;

}

}

if(!flag) cout << "-1 ";

}

return 0;

}

#include

#include

#include

using namespace std;

int m,k;

struct cmp{

bool operator() (int a,int b){

if(abs(a-b)<=k){

return false;

}

else{

return a

}

}

};

set s;

char op[10];

int x;

int main(void){

scanf("%d%d",&m,&k);

while(m--){

scanf("%s%d",op,&x);

if(op[0]=='a'){

if(s.find(x)==s.end()){

s.insert(x);

}

}

else if(op[0]=='d'){

s.erase(x);

}

else{

if(s.find(x)!=s.end()){

puts("Yes");

}

else{

puts("No");

}

}

}

return 0;

}

C++的set重载运算符的更多相关文章

c++的重载运算符

c++中允许重载运算符: 这是我辛苦的结果 #include"iostream"using namespace std;class aaa{ int x;public: aaa() ...

C# 重载运算符

如果你想让自己定义的类型可以用运算符进行运算,那么可以通过重载运算符来实现: 示例: class Salary { public int RMB { get; set; } public static ...

【STL】重载运算符

重载运算符 为什么要重载运算符: C++中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如结构体),也需要类似的运算操作.这时就必须在C++中重新定义这些运算符,赋予 ...

c++中有些重载运算符为什么要返回引用

事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...

C++ Primer : : 第十四章 : 重载运算符与类型转换之类型转换运算符和重载匹配

类型转换运算符 class SmallInt { public: SmallInt(int i = 0) : val(i) { if (i < 0 || i > 255) throw st ...

C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符

重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...

C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)

前言 这两天在网上看到的总结很多,尤其是博客园中的,很多很多,也给了我很多的启发,当然自己也总结过,而且有很多人也给与我一些意见和看法.不管怎样,自己还是先把所谓的基础知识加强巩固下吧. 2014年的 ...

c++重载运算符注意

c++重载运算符的时候加&或不加: 如果加了&表示引用,说明用的都是同一块内存.如果不加,那么用的就是一份拷贝,即不同的内存. 一般连续操作的时候要加&. 可以重新定义一个对象 ...

C++学习27 用全局函数重载运算符

运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数. 运算符重载函数作为类的成员函数 将运算符重载函数声明为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数.之所以 ...

Chapter14:重载运算符

对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数. int operator+(int, int);//错误,不能为int重定义内置运算符 对于一个重载的运算符来说,其优先级和结 ...

随机推荐

【LeetCode】583. Delete Operation for Two Strings 解题报告(Python & C++)

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

湫湫系列故事——消灭兔子(hdu4544)

湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...

ZOJ 3778:Talented Chef(贪心?思维)

Talented Chef Time Limit: 2 Seconds Memory Limit: 65536 KB As we all know, Coach Gao is a talented c ...

Chapter 2 Randomized Experiments

目录 概 2.1 Randomization 2.2 Conditional randomization 2.3 Standardization 2.4 Inverse probability wei ...

《python-美藏篇》1.可迭代、迭代器与生成器

首先区分可迭代对象(Iterable).迭代器(Iterator) 可迭代对象:包含__iter__方法的对象为可迭代对象,如List.Tuple.Dictionary 迭代器:包含__iter__. ...

nodejs创建一个简单的web服务

这是一个突如其来的想法,毕竟做web服务的框架那么多,为什么要选择nodejs,因为玩前端时,偶尔想调用接口获取数据,而不想关注业务逻辑,只是想获取数据,使用java或者.net每次修改更新后还要打包 ...

大厂必问的JVM面试题

本文目录: 讲一下JVM内存结构? 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 Java对象的定位方式 说一下堆栈的区别? 什么情况下会发生栈溢出? 类文件结构 什么是类加载 ...

MongoDB高级应用之高可用方案实战(4)

1.MongDB启动与关闭 1.1.命令行启动 ./mongod --fork --dbpath=/opt/mongodb/data ----logpath=/opt/mongodb/log/mong ...

PHP 的扩展类型及安装方式

扩展类型 底层扩展(基于C语言): PECL 上层扩展(基于PHP 语言): PEAR Composer PECL # 查找扩展 $ pecl search extname # 安装扩展 $ pecl ...

Unity3D开发入门教程(二)—— Lua入门

五邑隐侠,本名关健昌,12年游戏生涯. 本教程以 Unity 3D + VS Code + C# + tolua 为例. 如果你还没有编程基础,建议你先学习一些编程基础.本文不是完全菜鸟教程,主要针对 ...