C ++向量 - 查找(“'operator =='不匹配”)
Posted
技术标签:
【中文标题】C ++向量 - 查找(“\'operator ==\'不匹配”)【英文标题】:C++ vector - find ("no match for 'operator =='")C ++向量 - 查找(“'operator =='不匹配”) 【发布时间】:2014-07-14 12:44:31 【问题描述】:所以我对 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;
【问题讨论】:
感谢您提供包含错误消息和源代码的问题。错误消息说明了一切:您正在尝试比较向量和字符串。 你不能把std::vector<std::string>
和std::string
比较
那么我将如何循环遍历它呢?我想这就是你的意思。谢谢你们的回复。编辑:这是我得到部分代码的地方:***.com/questions/571394/…
通过 const 引用传递字符串以提高性能。
【参考方案1】:
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;
【讨论】:
三点说明: 命名 'it' 有点令人困惑,因为它不是一个迭代器。其次,这种情况下最好写for( auto& it : aData )
。没有 '&' 元素将被复制。最后,您应该提到这是一个 C++11 解决方案。
这是有道理的。非常感谢。 :-) 如果可以的话,我会接受作为答案。
@thelamb - 是的,你在这两个方面都是正确的。在使用容器时,使用it
对我来说是一个很难改掉的习惯。
为此我遇到了一些错误。 'auto' changes meaning in C++11; please remove it
, invalid declaratator before ':' token
, range-based 'for' loops are not allowed in C++98 mode
正如 cmets 中所指出的,此解决方案需要 C++11。如果需要为mingw启用C++11,可以访问this页面看看是否适用。否则,您可以使用任何其他不需要 C++11 的答案。【参考方案2】:
(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;
【讨论】:
明白。感谢您的回复。【参考方案3】:因为你有一个多维数组,所以你不能使用迭代器来遍历每个值,所以最好的方法是先创建一个循环
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
,而不能在完整向量的迭代器上使用。
【讨论】:
以上是关于C ++向量 - 查找(“'operator =='不匹配”)的主要内容,如果未能解决你的问题,请参考以下文章