• c++STL之常用查找算法


    引入#include<algorithm>

    算法简介:

    • find:查找元素
    • find_if:按条件查找
    • adjacent_find:查找相邻房重复的元素
    • binary_search:二分查找
    • count:统计元素个数
    • count_if:按条件统计元素个数

    1.find

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    #include <string>
    
    //常用查找算法
    //find
    
    //查找 内置数据类型
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
    
        //查找 容器中 是否有 5 这个元素
        vector<int>::iterator it = find(v.begin(), v.end(), 5);
        if (it == v.end())
        {
            cout << "没有找到!" << endl;
        }
        else
        {
            cout << "找到: " << *it << endl;
        }
    }
    
    
    class Person
    {
    public:
        Person(string name, int age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
    
        //重载 ==  底层find知道如何对比person数据类型
        bool operator==( const Person & p)
        {
            if (this->m_Name == p.m_Name && this->m_Age == p.m_Age)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        string m_Name;
        int m_Age;
    };
    
    //查找 自定义数据类型
    void test02()
    {
        vector<Person>v;
        //创建数据
        Person p1("aaa", 10);
        Person p2("bbb", 20);
        Person p3("ccc", 30);
        Person p4("ddd", 40);
    
        //放入到容器中
        v.push_back(p1);
        v.push_back(p2);
        v.push_back(p3);
        v.push_back(p4);
    
        Person pp("bbb", 20);
    
        vector<Person>::iterator it = find(v.begin(), v.end(), pp);
        if (it == v.end())
        {
            cout << "没有找到" << endl;
        }
        else
        {
            cout << "找到元素  姓名:" << it->m_Name << " 年龄: " << it->m_Age << endl;
        }
    }
    
    int main() {
    
        //test01();
    
        test02();
    
        system("pause");
    
        return 0;
    }

    2.find_if

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    #include <string>
    //常用查找算法 find_if
    
    //1、查找内置数据类型
    class GreaterFive
    {
    public:
        bool operator()(int val)
        {
            return val > 5;
        }
    };
    
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
    
        vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
    
        if (it == v.end())
        {
            cout << "没有找到" << endl;
        }
        else
        {
            cout << "找到大于5的数字为: " << *it << endl;
        }
    
    }
    
    //2、查找自定义数据类型
    class Person
    {
    public:
        Person(string name, int age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
        string m_Name;
        int m_Age;
    };
    
    class Greater20
    {
    public:
        bool operator()(Person &p)
        {
            return  p.m_Age > 20;
        }
    };
    
    void test02()
    {
        vector<Person>v;
    
        //创建数据
        Person p1("aaa", 10);
        Person p2("bbb", 20);
        Person p3("ccc", 30);
        Person p4("ddd", 40);
    
        v.push_back(p1);
        v.push_back(p2);
        v.push_back(p3);
        v.push_back(p4);
    
        //找年龄大于20的人
        vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater20());
    
        if (it == v.end())
        {
            cout << "没有找到" << endl;
        }
        else
        {
            cout << "找到姓名: " << it->m_Name << " 年龄: " << it->m_Age << endl;
        }
    }
    
    int main() {
    
        //test01();
    
        test02();
    
        system("pause");
    
        return 0;
    }

    3.adjacent_find

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    
    //常用查找算法 adjacent_find
    void test01()
    {
        vector<int>v;
        v.push_back(0);
        v.push_back(2);
        v.push_back(0);
        v.push_back(3);
        v.push_back(1);
        v.push_back(4);
        v.push_back(3);
        v.push_back(3);
    
        vector<int>::iterator  pos = adjacent_find(v.begin(), v.end());
     
        if (pos == v.end())
        {
            cout << "未找到相邻重复元素" << endl;
        }
        else
        {
            cout << "找到相邻重复元素:" << *pos << endl;
        }
    
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    4.binary_search

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    
    //常用查找算法 binary_search
    void test01()
    {
        vector<int>v;
        for (int i = 0; i < 10; i++)
        {
            v.push_back(i);
        }
        //v.push_back(2);  如果是无序序列,结果未知!
        //查找容器中是否有9 元素
        //注意:容器必须是有序的序列
        bool ret = binary_search(v.begin(), v.end(), 9);
    
        if (ret)
        {
            cout << "找到了元素" << endl;
        }
        else
        {
            cout << "未找到" << endl;
        }
    }
    
    int main() {
    
        test01();
    
        system("pause");
    
        return 0;
    }

    5.count

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    #include <string>
    //常用查找算法_count
    
    //1、统计内置数据类型
    
    void test01()
    {
        vector<int>v;
    
        v.push_back(10);
        v.push_back(40);
        v.push_back(30);
        v.push_back(40);
        v.push_back(20);
        v.push_back(40);
    
        int num = count(v.begin(), v.end(), 40);
    
        cout << "40的元素个数为: " << num << endl;
    }
    
    //2、统计自定义数据类型
    
    class Person
    {
    public:
        Person(string name, int age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
    
        bool operator==(const Person & p)
        {
            if (this->m_Age == p.m_Age)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        string m_Name;
        int m_Age;
    };
    
    void test02()
    {
        vector<Person>v;
    
        Person p1("刘备", 35);
        Person p2("关羽", 35);
        Person p3("张飞", 35);
        Person p4("赵云", 30);
        Person p5("曹操", 40);
    
        //将人员插入到容器中
        v.push_back(p1);
        v.push_back(p2);
        v.push_back(p3);
        v.push_back(p4);
        v.push_back(p5);
    
        Person p("诸葛亮", 35);
    
        int num = count(v.begin(), v.end(), p);
    
        cout << "和诸葛亮同岁数的人员个数为:" << num << endl;
    }
    
    int main() {
        
        //test01();
    
        test02();
    
        system("pause");
    
        return 0;
    }

    6.count_if

    #include<iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    
    //常用查找算法  count_if
    
    //统计内置数据类型
    class Greater20
    {
    public:
        bool operator()(int val)
        {
            return val > 20;
        }
    };
    
    void test01()
    {
        vector<int>v;
        v.push_back(10);
        v.push_back(40);
        v.push_back(30);
        v.push_back(20);
        v.push_back(40);
        v.push_back(20);
    
        int num = count_if(v.begin(), v.end(), Greater20());
    
        cout << "大于20的元素个数为: " << num << endl;
    }
    
    class Person
    {
    public:
        Person(string name, int age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
        string m_Name;
        int m_Age;
    };
    
    class AgeGreater20
    {
    public:
        bool operator()(const Person& p)
        {
            return p.m_Age > 20;
        }
    };
    
    //统计自定义数据类型
    void test02()
    {
        vector<Person>v;
    
        Person p1("刘备", 35);
        Person p2("关羽", 35);
        Person p3("张飞", 35);
        Person p4("赵云", 40);
        Person p5("曹操", 20);
    
        v.push_back(p1);
        v.push_back(p2);
        v.push_back(p3);
        v.push_back(p4);
        v.push_back(p5);
    
        //统计  大于20岁人员个数
        int num = count_if(v.begin(), v.end(), AgeGreater20());
        cout << "大于20岁的人员个数为:" << num << endl;
    }
    
    int main() {
    
        //test01();
    
        test02();
    
        system("pause");
    
        return 0;
    }
  • 相关阅读:
    推荐两个漂亮的编程字体【华为云技术分享】
    【云速建站】几个基本概念和流程解释【华为云技术分享】
    Too many open files的四种解决办法【华为云技术分享】
    基于Docker快速搭建ELK【华为云技术分享】
    重磅!普惠AI--华为云语音语义万次调用1元购,有奖问答@评论区等你来!【华为云技术分享】
    图库网站Unsplash高清原图爬虫【华为云技术分享】
    冒泡的问题及阻止冒泡
    封装可视区域大小的函数
    点击空白处隐藏案例
    计算滚动条的高度
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12114737.html
Copyright © 2020-2023  润新知