一道set例题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道set例题相关的知识,希望对你有一定的参考价值。
一、题目
最近某地连续发生了多起盗窃案件,根据监控和路人提供的线索得知,这是一个犯罪团伙。并且还知道这个犯罪团伙中每个人的身高、体重、年龄。警察想知道这个犯罪团伙中的每个人是不是本市的(如果本市有这个特征的人就认为是本市的)。但本是人口太多,又不能一个一个排查。警察又急需这条信息来缩小范围,所以警察特来找到聪明的你来解决这个棘手的问题。
输入格式
第一行将会输入两个数字n(1<=n<=2e5)和m(1<=m<=1e4)。n代表本市的人口数目,m代表犯罪团伙的数量。
后面n行每行有3个数字代表本事每个人的身高、体重、年龄。然后会有m行每行有3个数字代表犯罪团伙每个人的身高、体重、年龄。
输出格式
输出m行,没啊很难过输出一个“yes”或“№”,“yes”代表这个罪犯是本市的,“№”代表这个罪犯不是本市的。
样例输入和输出
二、解题思路
这题本质上就是,在你输入的数据中和给的数据是否匹配。因此想到set集合,并且利用set集合中含有的count判断元素是否存在于集合中,来解答。解题过程中,因为含有身高体重年龄这三个变量,将set和结构体进行联合,因为变量过多,采用在结构体中,创建构造函数,方便在主函数中传参,且当set和结构体联合使用时,一定要确切的重载运算符!
三、源码和注释
#include<set>//数据结构set的头文件
#include<vector>
using namespace std;
struct people
int h;
int w;
int age;
people(int _h, int _w, int _age)
h = _h;
w = _w;
age = _age;
//在结构体中创建一个构造函数,方便在主函数中传参(当结构体中定义多个变量时使用)
bool operator<(const people& rhs) const
if (h != rhs.h)
return h < rhs.h;
if (w != rhs.h)
return w < rhs.w;
return age < rhs.age;
//set与结构体联合使用时,一定要 确切地 重载运算符!
;
set<people> a;//定义集合
int main()
int n, m, h, w, age;
cin >> n >> m;
for (int i=0;i<n;i++)
cin >> h >> w >> age;
a.insert(people(h,w,age));
for (int i=0;i<m;i++)
cin >> h >> w >> age;
if (a.count(people(h,w,age)))//当结构体和set联合时,不能直接传参!(利用构造函数传参)
cout<<"yes"<<endl;
else
cout << "no" << endl;
return 0;
以上是关于一道set例题的主要内容,如果未能解决你的问题,请参考以下文章