C++ 标准::查找自定义比较器不起作用



我现在正在学习如何使用std::find和自定义比较器。

然而,按照网上的指导,我面临着一个编译器错误。

链接到我的代码。

以下是我的代码:

    #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));

最新更新