4

我在其中创建了一些带有重载 operator== 的对象。

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

在这种情况下,如果我在某处创建走廊矢量:

    vector<Corridor> m_vCorridors;

程序工作正常,我可以使用查找算法:

    auto itCorridor = find(m_vCorridors.begin(), m_vCorridors.end(), someID);

但是如果我创建指针向量:

    vector<Corridor*> m_vCorridors;

我收到一个错误:错误 1 ​​错误 C2446: '==' : no conversion from 'const int' to 'Corridor *' c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 41 Error 2 error C2040:“==”:“走廊 *”与“const int”c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 41 的间接级别不同

尝试以不同的方式重载 operator== ,但它不适用于这种情况。有人知道我应该怎么做才能解决问题吗?

4

1 回答 1

9

那是因为find试图将指向 a 的指针与 a 进行Corridor比较int。要将 a 与 a 进行比较Corridorint您需要定义自己的比较器,使用find_if. 假设您可以使用 C++11 lambda,

find_if(m_vCorridors.begin(), m_vCorridors.end(), [=](Corridor* cp) {
    return *cp == someID;
});
于 2013-06-14T16:32:52.730 回答