迭代定义为typedef C ++的向量

时间:2017-11-01 21:54:48

标签: c++

我有一个结构如下

struct pins
{
    PType pintypes;
    GType Grouptypes
};

其中PType和GType定义为

typedef std::vector< pInfo > PType;
typedef std::vector<gInfo> GType;

其中pInfo和gInfo是样本成员为

的类
struct pInfo {
    std::string pinNumber;
    std::string pinName;
};

现在我正在比较两个引脚变量的PinInfos。我想看看是否有两个引脚,它们具有完全相同的引脚类型。

我正在尝试如下。

for (std::vector<pInfo>::const_iterator prim1Pin = pins.pinTypes.begin(); prim1Pin != pins.pinTypes.end(); prim1Pin++)
    {
        if (bRet)
        {
            std::vector<pInfo>::const_iterator prim2pin = std::find(prim2.pinTypes.begin(), prim2.pinTypes.end(), (*prim1Pin).pinNumber);
            if (prim2pin!=prim2.pinTypes.end())
            {
                bRet &= ((*prim2pin).PinNumber== (*prim1Pin).PinNumber&& (*prim2pin).pinName == (*prim1Pin).pinName)                    
            }
            else
                bRet &= false;
        }
    }

当我编译它时,我在algorithm.h文件

中收到以下错误

Error C2678 binary '==' : no operator found which takes a left-hand operand of type 'pInfo' (or there is no acceptable conversion) C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\algorithm 41 不知道这有什么不对。 我使用的是比C ++ 11少的版本。

1 个答案:

答案 0 :(得分:2)

在致电find时,您正在搜索包含大量pinType个对象的容器,而您正在搜索string值。编译器需要operator==的重载,左边是pinType,右边是string

所以你想要提供那个操作,或者定义一个lambda或比较类来处理它。