与(C )无匹配函数

No matching function to (C++)

本文关键字:无匹配 函数      更新时间:2023-10-16

我正在尝试从向量中的键盘(其中元素来自结构)中找到一个数据。而且我对此错误消息感到疯狂。这是我的代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct item {
    string code;
    string name;
    string brand;
    int price;
};
vector<item> vstr;
int main(){
   vstr.push_back({"NK-001", "Nikon D3100", "Nikon", 200});
   vstr.push_back({"NK-002", "Nikon D3200", "Nikon", 400});
   vstr.push_back({"NK-003", "Nikon D3300", "Nikon", 350});
   string keywd = "NK-001";
   auto f = find(begin(vstr), end(vstr), keywd);
   if(f!= end(vstr)){
       cout << "Data Found";
   }
   else {
       cout << "Data Not Found";
   }
}

欢迎任何建议和帮助。预先感谢:)

编辑

所以这是错误消息:

D:Tugas KuliahAlgoritma dan PemrogramanTugas Kelompok>g++ -std=c++11 coba.cpp -o coba
In file included from c:mingwlibgccmingw326.3.0includec++bitsstl_algobase.h:71:0,
                 from c:mingwlibgccmingw326.3.0includec++bitschar_traits.h:39,
                 from c:mingwlibgccmingw326.3.0includec++ios:40,
                 from c:mingwlibgccmingw326.3.0includec++ostream:38,
                 from c:mingwlibgccmingw326.3.0includec++iostream:39,
                 from coba.cpp:1:
c:mingwlibgccmingw326.3.0includec++bitspredefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Iter_equals_val<_Value>::operator()(_Iterator) [with _Iterator = __gnu_cxx::__normal_iterator<item*, std::vector<item> >; _Value = const std::__cxx11::basic_string<char>]':
c:mingwlibgccmingw326.3.0includec++bitsstl_algo.h:120:14:   required from '_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<item*, std::vector<item> >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const std::__cxx11::basic_string<char> >]'
c:mingwlibgccmingw326.3.0includec++bitsstl_algo.h:161:23:   required from '_Iterator std::__find_if(_Iterator, _Iterator, _Predicate) [with _Iterator = __gnu_cxx::__normal_iterator<item*, std::vector<item> >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const std::__cxx11::basic_string<char> >]'
c:mingwlibgccmingw326.3.0includec++bitsstl_algo.h:3792:28:   required from '_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator<item*, std::vector<item> >; _Tp = std::__cxx11::basic_string<char>]'
coba.cpp:24:47:   required from here
c:mingwlibgccmingw326.3.0includec++bitspredefined_ops.h:194:17: error: no match for 'operator==' (operand types are 'item' and 'const std::__cxx11::basic_string<char>')
  { return *__it == _M_value; }

整个过程是您需要从std::find切换到std::find_if

const auto it = std::find_if(std::cbegin(vstr), std::cend(vstr),
    [&keywd](const auto& item) {
        return item.code == keywd;
});

由于您无法直接比较itemstd::string

demo