• 蒜头君破案(stl—set,stl—vector练习)


    ou_fan

    最近某地连续发生了多起盗窃案件。根据监控和路人提供的线索得知。这是一个犯罪团伙。并且还知道这个犯罪团伙中每一个人的身高、体重、年龄。警察想知道这个犯罪团伙中的每个人是不是本市的(如果本市有这个特征的人就是本市的)。但是本市人口太多。不能一个个排查。警察急需这条信息来缩小范围,所以警察特地找到聪明的你来帮忙解决这个棘手的问题。

    输入格式
    第一行将会输入两个数字n(1<=n<=2*105)和m(1<=m<=104)。n代表本市的人口数目。m代表犯罪团伙的数量。
    后面n行每行有3个数字代表本市每个人的身高、体重、年龄、。然后会有m行每行有3个数字代表犯罪团伙每个人的身高、体重、年龄。

    输出格式
    输出m行,每行输出一个YES或者NO,YES代表是本市的,NO代表不是本市的。


    样例输入:
    3 2
    166 50 30
    178 60 23
    132 40 15
    167 50 30
    178 60 23

    样例输出:
    NO
    YES

     解题步骤:

    1.结构体封装身高·体重·年龄

    2.重载运算符,设立比较条件,进行排序,方便使用set容器;

    3.读入数据,放入新建结构体类型的容器。

    我使用了两种方法解这道题;

    STL——vector容器;

    1. //ou_fan
    2. #include
    3. using namespace std;
    4. struct people {
    5. int high;
    6. int weight;
    7. int age;
    8. //构造函数:方便读入
    9. people(int a, int b, int c) {
    10. high = a;
    11. weight = b;
    12. age = c;
    13. }
    14. };//封装身高等数据
    15. vectorv;//创建vector,用于存放结构体
    16. int main() {
    17. int m, n, num1, num2, num3;
    18. cin >> n >> m;
    19. for (int i = 0;i < n;i++) {
    20. cin >> num1 >> num2 >> num3;
    21. v.push_back(people(num1,num2,num3));
    22. }
    23. auto it = v.begin();
    24. int i;
    25. for (it, i = 0;i < m;it++, i++) {
    26. cin >> num1 >> num2 >> num3;
    27. if ((*it).high == num1 && (*it).weight == num2 && (*it).age == num3) {
    28. cout << "YES" << endl;
    29. }
    30. else cout << "NO" << endl;
    31. }
    32. }

    对比(结构体+数组),该方法不用考虑开多大的数组;

    STL——set容器;

    1. //ou_fan
    2. #include
    3. using namespace std;
    4. struct people{
    5. int high;
    6. int weight;
    7. int age;
    8. people(int a, int b, int c) {
    9. high = a;
    10. weight = b;
    11. age = c;
    12. }
    13. bool operator <(const people& rhs)const {
    14. if (high != rhs.high) { return high < rhs.high; }
    15. else if (weight != rhs.weight) {return weight < rhs.weight;}
    16. else return age < rhs.age;
    17. }//无论怎么给,都要比较出一个结果;
    18. };
    19. sets;
    20. int main(){
    21. int n, m, h, w, age;
    22. cin >> n >> m;
    23. for (int i = 0;i < n;i++) {
    24. cin >> h >> w >> age;
    25. s.insert(people(h,w,age));//使用了构造函数,所以这样读入方便
    26. }
    27. for (int i = 0;i < m;i++) {
    28. cin >> h >> w >> age;
    29. if (s.count(people(h, w, age))) {
    30. cout << "YES" << endl;
    31. }
    32. else cout << "NO" << endl;
    33. }
    34. }

    这个方法需要重载运算符,因为set是自动排序去重容器;需要比较条件;并且使用到了构造函数

    构造函数介绍

    构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
    名称与类的名称是完全相同的,不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

    若不用构造函数,则需要定义一个结构体变量,先赋值给结构体变量,再把结构体变量放入set中。过程如下:

    people p;

    p.age=a;p.high=high;p.weight=w;

    s.insert(p);

  • 相关阅读:
    猿创征文|基于SSM框架+java+maven+jsp的小项目
    C++-继承-单继承-虚函数-内存结构分析-汇编分析-逆向分析(一)
    开了抖音小店,如何做抖店运营?实操经验分享!
    求你了,别在高并发场景中使用悲观锁了!
    Matlab如何导入Excel数据并进行FFT变换
    JetBrain Pycharm的一系列快捷键
    低代码平台简介(10家国产化低代码平台详细介绍)
    免费开源线上社交交友婚恋系统平台 可打包小程序 支持二开 源码交付!
    MaxKey单点登录认证系统v3.5.10GA发布
    k8s--基础--25.3--Helm--常用命令和常见错误
  • 原文地址:https://blog.csdn.net/m0_72522122/article/details/127131488