我创建了一些带有重载operator ==的Object。
class Corridor
{
public:
Corridor(int iStart, int iEnd);
~Corridor();
// Overloaded operators to simplify search in container.
friend bool operator==(const Corridor& lhs, const int rhs);
friend bool operator==(const int lhs, const Corridor& rhs);
protected:
int m_iIntersectionIDStart;
int m_iIntersectionIDEnd;
};
在这种情况下,如果我创建Corridors的某处矢量:
vector<Corridor> m_vCorridors;
proggram工作正常,我可以使用find算法:
auto itCorridor = find(m_vCorridors.begin(), m_vCorridors.end(), someID);
但是如果我创建指针向量:
vector<Corridor*> m_vCorridors;
我收到错误: 错误1错误C2446:'==':没有从'const int'转换为'Corridor *'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ algorithm 41 错误2错误C2040:'==':'Corridor *'的间接级别与'const int'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ algorithm 41
不同尝试以不同的方式重载operator ==,但它不适用于这种情况。有人知道我应该怎么做来解决问题吗?
答案 0 :(得分:9)
这是因为find
正在尝试将指向Corridor
的指针与int
进行比较。要再次将Corridor
与int
进行比较,您需要使用find_if
定义自己的比较器。假设你可以使用C ++ 11 lambdas,
find_if(m_vCorridors.begin(), m_vCorridors.end(), [=](Corridor* cp) {
return *cp == someID;
});