没有匹配函数(C ++)

问题描述 投票:-2回答:1

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

#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";
   }
}

欢迎任何建议和帮助。提前致谢 :)

EDIT

所以这是错误信息:

D:\Tugas Kuliah\Algoritma dan Pemrograman\Tugas Kelompok>g++ -std=c++11 coba.cpp -o coba
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_algobase.h:71:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\ostream:38,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\iostream:39,
                 from coba.cpp:1:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\predefined_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:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_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:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_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:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_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:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\predefined_ops.h:194:17: error: no match for 'operator==' (operand types are 'item' and 'const std::__cxx11::basic_string<char>')
  { return *__it == _M_value; }
c++ vector structure
1个回答
0
投票

整个事情是你需要从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

© www.soinside.com 2019 - 2024. All rights reserved.