C++ vector - find ("нет совпадения для 'operator =='")
Так что я довольно новичок в 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 ответа
mClass::aData.begin()
а также mClass.aData.end()
возвращать итераторы по векторам, а не итераторы по строкам. Здесь нет operator ==
сравнить vector
и string
, Отсюда и ошибка.
Вам нужно будет перебрать 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;
}
Решение (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;
}
Поскольку у вас есть многомерный массив, вы не можете использовать итератор для просмотра каждого значения, поэтому лучший способ сделать это - сначала сделать цикл
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
только на самом низком уровне итератора, а не на итераторе для полного вектора.