我正在尝试从向量中的键盘中找到数据(其中元素来自结构)。我对此错误消息感到很疯狂。这是我的代码
#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 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; }
整个事情是你需要从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;
});
因为你不能直接比较item
和std::string
。