【发布时间】:2013-07-10 02:19:00
【问题描述】:
我一直在尝试找出在向量中找到对象的最佳方法。目前我正在尝试在这个对象上使用 find:
class Category
{
public:
string modeType;
vector<VideoMode> videoModes;
Category(){}
Category(string name)
{
modeType = name;
}
friend bool operator== ( const Category &c1, const string &c2 )
{
return c1.modeType == c2;
}
};
这是我的发现:
vector<Category>::iterator category = find(modes.begin(), modes.end(), Category("Name"));
当我尝试编译时出现错误提示“没有找到运算符,它为“==”采用“类别”类型的左侧操作数我查看了算法标题并找到了查找代码:
template<class _InIt,
class _Ty> inline
_InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val)
{ // find first matching _Val
for (; _First != _Last; ++_First)
if (*_First == _Val)
break;
return (_First);
}
虽然我不确定从这里去哪里。任何建议将不胜感激,我不太了解 C++ :(
【问题讨论】:
-
如果它只访问公共成员,它不应该是一个真正的朋友功能。使其成为非朋友免费功能,我会为这两个参数采用
Category。如果用string调用它,它将被转换。唯一可能会弄乱的是字符串文字(至少在我们得到 s 后缀之前)。 -
将其从字符串更改为类别使其工作,并感谢您的建议。如果您将其发布为答案,我可以接受它作为最佳答案,谢谢!