所以我对C ++很陌生,所以我想循环遍历一个多维向量,但是我遇到了错误,比如
stl_algo.h
error: no match for 'operator==' (operand types are std::vector<std::basic_string<char> >' and 'const std::basic_string<char>'
有很多错误,这是代码:
mClass.h
std::vector<std::vector<std::string> > aData;
mClass.cpp
bool mClass::checkVector(std::string k)
{
if (std::find(mClass::aData.begin(), mClass::aData.end(), k) != mClass::aData.end())
{
return true;
}
return false;
}
答案 0 :(得分:6)
mClass::aData.begin()
和mClass.aData.end()
通过向量返回迭代器,而不是字符串上的迭代器。没有operator ==
来比较vector
和string
。因此错误。
您需要遍历vector
。假设你有C ++ 11支持:
bool mClass::checkVector(std::string const& k)
{
for (auto const& vec : aData) { // Each `vec` is a std::vector<std::string>
for (auto const& str : vec) { // Each `str` is a std::string
// compare string represented by it2
if (str == k) {
return true;
}
}
}
return false;
}
答案 1 :(得分:1)
(pre-c ++ 11)解决方案是首先迭代向量:
为方便起见,请注意typedef。
typedef std::vector<std::vector<std::string> > vvec;
bool mClass::checkVector(std::string k)
{
for(vvec::const_iterator it=mClass::aData.begin(), end=mClass::aData.end();it!=end;++it){
const std::vector<std::string>& inner=*it;
if (std::find(inner.begin(), inner.end(), k) != inner.end())
{
return true;
}
}
return false;
}
答案 2 :(得分:1)
因为你有一个多维数组,你不能使用迭代器来遍历每个值,所以最好的方法是首先创建一个循环
for(std::vector<std::vector<std::string> >::iterator it = Class::aData.begin(); it!=mClass::aData.end(); ++it)
if (std::find(it->begin(), it->end(), k) != it->end())
{
return true;
}
return false;
只能在最低级别的迭代器上使用std::find
,而不能在完整向量上的迭代器上使用{{1}}。