C ++ vector - find(“不匹配'运算符=='”)

时间:2014-07-14 12:44:32

标签: c++ mingw32

所以我对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;
}

3 个答案:

答案 0 :(得分:6)

mClass::aData.begin()mClass.aData.end()通过向量返回迭代器,而不是字符串上的迭代器。没有operator ==来比较vectorstring。因此错误。

您需要遍历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}}。