C++向量 - 查找 ( "no match for 'operator =='" )

C++ vector - find ("no match for 'operator =='")

本文关键字:operator for match 向量 查找 no C++      更新时间:2023-10-16

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

mClass::aData.begin()mClass.aData.end()返回vector的迭代器,而不是string的迭代器。没有operator ==来比较vectorstring。因此出现了错误。

您需要遍历vector s。假设您有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;
}

(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;
}

因为你是一个多维数组你不能使用迭代器遍历每个值所以最好的方法是先做一个循环

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,不能在全向量的迭代器上使用。

相关文章: