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

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

template<class T, class C, class A> 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 <bits/stdc++.h> #define PII pair<int ,int>
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<int,cmp> 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 <cstdio>
#include <algorithm>
#include <set>
using namespace std;
int m,k;
struct cmp{
bool operator() (int a,int b){
if(abs(a-b)<=k){
return false;
}
else{
return a<b;
}
}
};
set<int,cmp> 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重载运算符的更多相关文章

  1. c++的重载运算符

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

  2. C# 重载运算符

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

  3. 【STL】重载运算符

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

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

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

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

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

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

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

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

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

  8. c++重载运算符注意

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

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

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

  10. Chapter14:重载运算符

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

随机推荐

  1. 【LeetCode】416. Partition Equal Subset Sum 解题报告(Python & C++)

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

  2. How Many Sets I(zoj3556)

    How Many Sets I Time Limit: 2 Seconds      Memory Limit: 65536 KB Give a set S, |S| = n, then how ma ...

  3. [opencv]KAZE、AKAZE特征检测、匹配与对象查找

    AkAZE是KAZE的加速版 与SIFT,SUFR比较: 1.更加稳定 2.非线性尺度空间 3.AKAZE速度更加快 4.比较新的算法,只有Opencv新的版本才可以用 AKAZE局部匹配介绍 1.A ...

  4. MA8601升级版 PL2586|USB HUB 工控级芯片方案PL2586|可直接替代FE1.1S芯片方案

    MA8601升级版 PL2586|USB HUB 工控级芯片方案PL2586|可直接替代FE1.1S芯片方案 旺玖在2022年新推出的一款USB HUB 芯片其性能和参数可以完全替代FE1.1S,是M ...

  5. [黑科技]pb_ds库(G++)

    一.hash(速度快的恐怖).http://codevs.cn/problem/1230/ 1 #include<stdio.h> 2 #include<ext/pb_ds/asso ...

  6. maven dependency全局排除

    http://www.voidcn.com/article/p-zychsdnd-bqg.html 个人比较喜欢log4j.properties这种配置文件,而springboot默认使用logbac ...

  7. 【JPA】Spring Data JPA 实现分页和条件查询

    文章目录 1.在`Repository`层继承两个接口 2.在Service层进行查询操作 3.Page的方法 1.在Repository层继承两个接口 JpaRepository<Admin, ...

  8. mysql语句1-创建库和表

    一.DDL数据定义语言 就是对书库内部的对象进行创建.删除.修改等操作的语言. 关键字:create  drop  alter 1.连接数据库 mysql -u用户名 -p -h指定主机(不指定默认是 ...

  9. 03.python封装与解构

    封装与结构 基本概念 t1 = 1, 2 print(type(t1)) # 什么类型 t2 = (1, 2) print(type(t2)) Python等式右侧出现逗号分隔的多值的时候,就会将这几 ...

  10. linux(CentOS7) 之 克隆虚拟机并配置网络(固定ip)

    克隆机器 原机关机状态下,克隆. 下一步 选择当前状态,下一步 选择创建完整克隆,下一步 设置虚拟机名称(完成后可以修改).克隆机安装位置,下一步 等待克隆完成 克隆完成 配置网络 添加网卡(因为物理 ...