返回自定义类对象向量的std :: find的值

时间:2016-06-10 08:06:53

标签: c++ class vector find return-value

我想使用std :: find的返回值,但它不会编译。

  

错误:不匹配'运营商=' in' it = __gnu_cxx :: operator!=>(((const __gnu_cxx :: __ normal_iterator> )(&   std :: find< __ gnu_cxx :: __ normal_iterator>,   虚拟>(dummylist.std :: vector< _Tp,_Alloc> :: begin>(),dummylist.std :: vector< _Tp,   _Alloc> :: end>(),((const Dummy )(& Dummy(tempArray [0])))))),((const   __gnu_cxx :: __ normal_iterator> )(& dummylist.std :: vector< _Tp,_Alloc> :: end   ())))'

#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#define SIZEDATASET 1

using namespace std;

class Dummy
{
public:
    Dummy(int Name)
    {
        this->Name = Name;
        this->v0 = 0;
        cout << "Hello, im new " << this->Name << endl;
    }
    ~Dummy()
    {
        cout << "Im done " << this->Name << endl;
    }
    int Name;
    int v0;
};

bool operator== (const Dummy &D0, const Dummy &D1)
{
    return D0.Name == D1.Name;
}


void printClass(vector<Dummy>:: iterator D)
{
    cout << "Name: " << (D)->Name << endl;
    cout << "v0: " << (D)->v0 << endl;
    return;
}

int main()
{
    string str0 = "1;3;2;2;2;4;";
    string str1 = ";";
    string str2;
    int ende = 0;
    int start = 0;
    int length = 0;
    int tempArray[SIZEDATASET] = {0};
    int _switch = 0;
    int i;
    vector<Dummy> dummylist;
    vector<Dummy>:: iterator it;
    Dummy *DummyTemp;


    while((unsigned int)(ende = str0.find(str1,ende))!= std::string::npos)
    {
        length = ende - start;
        str2 = str0.substr(start,length);
        ende+= str1.size();
        start=ende;

        tempArray[_switch]= atoi(str2.c_str());
        _switch++;

        if((_switch%=SIZEDATASET) == 0)
        {
            for(i=0; i<SIZEDATASET; i++)
            {
                cout << tempArray[i] << " ";
            }
            cout << endl;



/*this line*/ if((it = find(dummylist.begin(),dummylist.end(),Dummy(tempArray[0])) != dummylist.end())) /* why u not work?*/
            {
                cout << "match " << endl;
                it->v0++;
            }
            else
            {
                cout << "no match" << endl;
                dummylist.push_back(Dummy(tempArray[0]));
                DummyTemp = &(dummylist.back());
                DummyTemp->v0++;
            }
        }

    }
    it = dummylist.begin();
    while(it != dummylist.end())
    {
        printClass(it);
        it++;
    }
    dummylist.clear();


    return 0;
}

稍后程序将收到一串数据(str0)将其剪切并存储在临时(tempArray)中。 然后我检查(使用find)我是否已经获得具有相同名称的设置数据(tempArray [0]表示数据集的名称)。如果不是这种情况,我会创建一个包含数据的新类,并将其存储在向量(dummylist)中。如果我在向量中找到了一个具有相同名称的数据集,我想通过使用find()的返回值来更改向量中现有类的值。

函数find()返回一个迭代器,&#34;它&#34;是一个,所以我不知道为什么会出现错误。

抱歉我的英语。

此致 星

编辑: 请注意,我不会像在这个post.

中那样与find()本身斗争

1 个答案:

答案 0 :(得分:1)

您的if语句包含错误:您正在尝试分配比较操作的结果,而不是比较分配的结果。变化:

if((it = find(dummylist.begin(),dummylist.end(),Dummy(tempArray[0])) != dummylist.end()))

要:

if((it = find(dummylist.begin(),dummylist.end(),Dummy(tempArray[0]))) != dummylist.end())