STL怎样实现这样的查找功能?
来源:百度知道 编辑:UC知道 时间:2024/06/18 15:54:51
如果要写一个函数,从指定的vector<int>中查找绝对值等于指定的值n的那一项iterator,如何实现呢?
函数如下:
vector<int>::iterator search(const vector<int>& vect, int n)
{
return find_if(vect.begin(), vect.end(), MatchCase);
}
然后我得写一个作为匹配条件的函数MatchCase,可是原来的n该怎样传给这个函数呢?
bool MatchCase(int num) { return ???; }
另外,用binary_search倒是可以把n传过去,不过,binary_search返回的只是true/false,表示有没有找到,该如何得到符合条件的iterator呢?
还有其它的函数,find()只能查找指定的值,不能指定匹配条件,该怎样又能指定值,又能指定匹配条件,又可以得到匹配成功的iterator呢?
函数如下:
vector<int>::iterator search(const vector<int>& vect, int n)
{
return find_if(vect.begin(), vect.end(), MatchCase);
}
然后我得写一个作为匹配条件的函数MatchCase,可是原来的n该怎样传给这个函数呢?
bool MatchCase(int num) { return ???; }
另外,用binary_search倒是可以把n传过去,不过,binary_search返回的只是true/false,表示有没有找到,该如何得到符合条件的iterator呢?
还有其它的函数,find()只能查找指定的值,不能指定匹配条件,该怎样又能指定值,又能指定匹配条件,又可以得到匹配成功的iterator呢?
用函数对象吧,这样就可以传参数了,当然具体比较逻辑你自己写好了
#include <vector>
#include <algorithm>
using std::vector;
class MatchCase {
public:
MatchCase(int n) : num(n) {}
bool operator()(int n) {
return n == num;
}
private:
int num;
};
int main()
{
vector<int> v;
find_if(v.begin(), v.end(), MatchCase(1));
return 0;
}