c++常用查找算法

算法简介:
find //查找元素
find_if //按条件查找元素
adjacent_find //查找相邻重复元素
binary_search //二分查找法
count //统计元素个数
count_if //按条件统计元素个数

find
功能描述:
查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()
函数原型:
find(iterator beg, iterator end, value);
// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
// beg 开始迭代器
// end 结束迭代器
// value 查找的元素

class Person {
public:
    Person(string name, int age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
    //自定义数据类型要重载==,因为底层使用的是==来判断find函数,所以需要重载这个
    bool operator==(const Person& p)
    {
        if (this->m_Name == p.m_Name && this->m_Age == p.m_Age)
        {
            return true;
        }
        return false;
    }
 
public:
    string m_Name;
    int m_Age;
};
vector<Person>::iterator it = find(v.begin(), v.end(), p2);

find_if
功能描述:
按条件查找元素
函数原型:
find_if(iterator beg, iterator end, _Pred);
// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
// beg 开始迭代器
// end 结束迭代器
// _Pred 函数或者谓词(返回bool类型的仿函数)

class Person {
public:
    Person(string name, int age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
public:
    string m_Name;
    int m_Age;
};
 
class Greater20
{
public:
    bool operator()(Person &p)
    {
        return p.m_Age > 20;
    }
 
};
bool Greater10(Person &p)
{
  return p.m_Age>20;
}
vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater20());
vector<Person>::iterator it = find_if(v.begin(), v.end(), Greater10);

adjacent_find
功能描述:
查找相邻重复元素
函数原型:
adjacent_find(iterator beg, iterator end);
// 查找相邻重复元素,返回相邻元素的第一个位置的迭代器
// beg 开始迭代器
// end 结束迭代器

如果有多个相邻,返回第一个相邻

class Person {
public:
    Person(string name, int age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
//跟find一样,自定义数据类型要重载==,因为底层使用的是==来判断find函数,所以需要重载这个
    bool operator == (const Person &p)
    {
      if(this->m_Age == p.m_Age && this->m_Name == p.m_Name)
      {
        return true;
      }else{
        return false;9
      }
    }
public:
    string m_Name;
    int m_Age;
};

vector<Person>::iterator it = adjacent_find(v.begin(), v.end());

binary_search
功能描述:
查找指定元素是否存在,二分法进行查找
函数原型:
bool binary_search(iterator beg, iterator end, value);
// 查找指定的元素,查到 返回true 否则false
// 注意: 无序序列中不可用
// beg 开始迭代器
// end 结束迭代器
// value 查找的元素

自定义数据中同样需要重载==

count
功能描述:
统计元素个数
函数原型:
count(iterator beg, iterator end, value);
// 统计元素出现次数,返回一个int
// beg 开始迭代器
// end 结束迭代器
// value 统计的元素

自定义数据中同样需要重载==

count_if
功能描述:
按条件统计元素个数
函数原型:
count_if(iterator beg, iterator end, _Pred);
// 按条件统计元素出现次数
// beg 开始迭代器
// end 结束迭代器
// _Pred 谓词

和find_if差不多

posted @   纸包鱼  阅读(252)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示