c++ std::find 自定义比较器不起作用
c++ std::find custom comparator doesn't work
我正在学习如何使用 std::find 和自定义比较器。
但是,按照在线指导,我遇到了编译错误。
Link 到我的 code.
下面是我的代码:
#include <iostream>
#include <algorithm>
#include <pair.h>
#include <vector>
using namespace std;
int main()
{
struct comp
{
comp(const int& input) : _input(input) {}
bool operator()(const pair<int, int>& iPair)
{
return (iPair.first == _input);
}
int _input;
};
pair<int, int> pair1(1,3);
pair<int, int> pair2(2,4);
vector<pair<int, int> > vec;
vec.push_back(pair1);
vec.push_back(pair2);
vector<pair<int,int> >::iterator it = find(vec.begin(), vec.end(), comp(1));
if(it != vec.end())
{
cout << it->second << endl;
}
return 0;
}
错误如下:
In function 'int main()':
Line 27: error: no matching function for call to 'find(__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::pair<int, int>*, __gnu_norm::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, __gnu_debug_def::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::pair<int, int>*, __gnu_norm::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, __gnu_debug_def::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, main()::comp)'
compilation terminated due to -Wfatal-errors.
非常感谢。
std::find
不采用自定义比较器。您需要使用 std::find_if
:
auto it = find_if(vec.begin(), vec.end(), comp(1));
我正在学习如何使用 std::find 和自定义比较器。
但是,按照在线指导,我遇到了编译错误。
Link 到我的 code.
下面是我的代码:
#include <iostream>
#include <algorithm>
#include <pair.h>
#include <vector>
using namespace std;
int main()
{
struct comp
{
comp(const int& input) : _input(input) {}
bool operator()(const pair<int, int>& iPair)
{
return (iPair.first == _input);
}
int _input;
};
pair<int, int> pair1(1,3);
pair<int, int> pair2(2,4);
vector<pair<int, int> > vec;
vec.push_back(pair1);
vec.push_back(pair2);
vector<pair<int,int> >::iterator it = find(vec.begin(), vec.end(), comp(1));
if(it != vec.end())
{
cout << it->second << endl;
}
return 0;
}
错误如下:
In function 'int main()':
Line 27: error: no matching function for call to 'find(__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::pair<int, int>*, __gnu_norm::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, __gnu_debug_def::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<std::pair<int, int>*, __gnu_norm::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, __gnu_debug_def::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > >, main()::comp)'
compilation terminated due to -Wfatal-errors.
非常感谢。
std::find
不采用自定义比较器。您需要使用 std::find_if
:
auto it = find_if(vec.begin(), vec.end(), comp(1));