c++中find算法

64 篇文章 0 订阅

常用的查找find

  • find算法查找元素
    @param beg容器开始迭代器
    @param end 容器结束迭代器
    @param value 查找的元素
    @return返回查找元素的位置,失败:返回v.end();
find( iterator beg, iterator end ,value )
  • 例子:
vector<int> v1 ;
v1.push_back(10) ;
vl.push_back(20) ;
v1.push_back(30) ;
v1.push_back(40) ;
vector<int> :: iterator ret;
ret = find(v1.begin() ,v1.end() ,200) ;
if(ret != v1.end() )
{
	cout<<"找到的数据为:"<<*ret<<endl;
}

查找自定义类型

class Person
{
public:
	string name;
	int age;
public:
	Person(string name,int age)
	{
		this->name = name ; 
		this->age = age;
	}
	bool operator==(const Person &ob) .
		{
			if (this->name == ob.name && this->age==ob.age)
				return true ;
			return false ;
		}
};

vector<Person> v2;
v2. push_back(Person(" 德玛西亚" ,18)) ;
v2. push_back(Person("小法" ,19)) ;
v2. push_back(Person("小炮" ,20)) ;
v2. push_back(Person("牛头",21)) ;

Person tmp("小炮" ,20) ;
vector<Person> :: iterator ret2 ;
//对于find寻找自定义数据需要重载==
ret2 = find(v2 . begin() ,v2.end(),tmp) ;
if(ret2 != v2.end())
{
	cout<<"找到的数据name="<<(*ret2).name<<",age="<<(*ret2) .age<<endl;
}

find_if

  • 按条件查找
通过普通函数:
bool myGreaterThan20(int val)
{
	return val>20;
}

通过仿函数:
class myGreaterThan20
{
public:
	bool operator()(int val)
	{
		return val>20;
	}
};

void test04( )
{
	vector<int> v1;
	v1.push_back(10) ;
	v1.push_back(20) ;
	v1.push_back(30) ;
	v1.push_back(40) ;
	//寻找第一个大于20的数
	vector<int>:: iterator ret;
	ret = find_if(v1.begin() ,v1.end(),myGreaterThan20 ) ;
	或 
	ret = find_if(v1.begin() ,v1.end()myGreaterThan20() ) ;
	if(ret != v1.end())
	{
		cout<<"寻找到的数据为:"<<*ret<<endl ;
	}
}

adjacent_find

  • adjacent_find 算法查找相邻重复元素
    @param beg容器开始迭代器
    @param end容器结束迭代器
    @param _callback 回调时数或者谓词(返问/ bool类型的的数对象)
    @return返回相邻元素的第一个位置的迭代器
adjacent_find( iterator beg, iterator end, _callback);
  • 例子等同于上述函数,自定义类型需要回调函数。
  • 下面的自定义类型通过内存比较,所以不需要写回调函数。
vector<Person> v2 ;
v2.push_back(Person(" 德玛西亚" ,18)) ;
v2.push_back(Person("小法" ,19) ) ;
v2.push_back(Person("小法", 19));1 [
v2.push_back(Person("牛头" ,21)) ;
vector<Person> ::iterator ret2 ;
ret2 = adjacent_find(v2.begin() ,v2.end()) ;
if(ret2 != v2.end())
	cout<<"寻找到重复的数据:"<<(*ret2) .name<<" "<<(*ret2) . age< <endl ;

binary_search二分法查找(容器有序)

  • binary_ search算汰二 分查找法
    注意:在无序序列中不用
    @param beg容器开始迭代器
    @param end容器结束迭代器
    @param value 查找的元素
    @return bool查找到返回true,否则false
bool binary_search(iterator beg, iterator end, value);

count

  • 返回统计n出现的次数
count(iterator begin, iterator end, n);

count_if

  • 统计返回大于/小于某个值的出现次数。
count(iterator begin, iterator end, callback);
  • 或使用内建函数:
count(iterator begin, iterator end, bind2nd(greater<int>(),10));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值