C ++检查元素是否在我的向量中但无法从eclipse转换错误
C++ checking if an element is in my vector but getting failed to convert errors from eclipse
下面是我的代码。我给了它几个输入,但重要的是符号和符号列表。 symbolList 是字符串的二维向量。这里的目的是检查 symbolList 中是否存在符号,我正在使用这里的示例:https://www.techiedelight.com/check-vector-contains-given-element-cpp/
这是代码,错误在 if 语句上。
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <string.h>
#include "windows.h"
#include <vector>
#include <chrono>
#include <algorithm>
using namespace std;
bool check_input(string &orderID, char buysell, string &symbol, int &qty, string &error, vector<vector<string>> &symbolList) {
error="None";
//omitted some irrelevant stuff
if (std::find(symbolList.begin(), symbolList.end(), symbol) != symbolList.end()) {
error= "wrong symbol";
return false;
}
return true;
}
但是 eclipse 在我的代码中给出了这个错误,我不明白为什么:
could not convert 'std::find<__gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >, std::basic_string<char> >((& symbolList)->std::vector<std::vector<std::basic_string<char> > >::begin(), (& symbolList)->std::vector<std::vector<std::basic_string<char> > >::end(), (*(const std::basic_string<char>*)(& symbol)))' from '__gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >' to 'bool'
编译报错:
/usr/lib/gcc/x86_64-pc-cygwin/9.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<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Value = const std::basic_string<char>]':
/usr/lib/gcc/x86_64-pc-cygwin/9.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<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const std::basic_string<char> >]'
/usr/lib/gcc/x86_64-pc-cygwin/9.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<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const std::basic_string<char> >]'
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/include/c++/bits/stl_algo.h:3938:28: required from '_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Tp = std::basic_string<char>]'
../src/oncemore.cpp:37:60: required from here
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/include/c++/bits/predefined_ops.h:241:17: error: no match for 'operator==' (operand types are 'std::vector<std::basic_string<char> >' and 'const std::basic_string<char>')
您可以在 vector<string>
中找到 string
,但您试图在 vector<vector<string>>
中找到 string
,find
无法做到那。
这不是唯一的方法,但我的建议是循环使用 find
。
for (const auto& row : symbolList) {
if (std::find(row.begin(), row.end(), symbol) != row.end()) {
error= "wrong symbol";
return false;
}
}
row
是对 vector<string>
的引用,因此您可以在其中找到一个字符串。
下面是我的代码。我给了它几个输入,但重要的是符号和符号列表。 symbolList 是字符串的二维向量。这里的目的是检查 symbolList 中是否存在符号,我正在使用这里的示例:https://www.techiedelight.com/check-vector-contains-given-element-cpp/
这是代码,错误在 if 语句上。
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <string.h>
#include "windows.h"
#include <vector>
#include <chrono>
#include <algorithm>
using namespace std;
bool check_input(string &orderID, char buysell, string &symbol, int &qty, string &error, vector<vector<string>> &symbolList) {
error="None";
//omitted some irrelevant stuff
if (std::find(symbolList.begin(), symbolList.end(), symbol) != symbolList.end()) {
error= "wrong symbol";
return false;
}
return true;
}
但是 eclipse 在我的代码中给出了这个错误,我不明白为什么:
could not convert 'std::find<__gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >, std::basic_string<char> >((& symbolList)->std::vector<std::vector<std::basic_string<char> > >::begin(), (& symbolList)->std::vector<std::vector<std::basic_string<char> > >::end(), (*(const std::basic_string<char>*)(& symbol)))' from '__gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >' to 'bool'
编译报错:
/usr/lib/gcc/x86_64-pc-cygwin/9.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<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Value = const std::basic_string<char>]':
/usr/lib/gcc/x86_64-pc-cygwin/9.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<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const std::basic_string<char> >]'
/usr/lib/gcc/x86_64-pc-cygwin/9.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<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Predicate = __gnu_cxx::__ops::_Iter_equals_val<const std::basic_string<char> >]'
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/include/c++/bits/stl_algo.h:3938:28: required from '_IIter std::find(_IIter, _IIter, const _Tp&) [with _IIter = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Tp = std::basic_string<char>]'
../src/oncemore.cpp:37:60: required from here
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/include/c++/bits/predefined_ops.h:241:17: error: no match for 'operator==' (operand types are 'std::vector<std::basic_string<char> >' and 'const std::basic_string<char>')
您可以在 vector<string>
中找到 string
,但您试图在 vector<vector<string>>
中找到 string
,find
无法做到那。
这不是唯一的方法,但我的建议是循环使用 find
。
for (const auto& row : symbolList) {
if (std::find(row.begin(), row.end(), symbol) != row.end()) {
error= "wrong symbol";
return false;
}
}
row
是对 vector<string>
的引用,因此您可以在其中找到一个字符串。