从类型结构的向量中删除元素

时间:2016-03-01 04:47:20

标签: c++ boost vector

我正在尝试这段代码。我想要做的是从类型结构的向量中删除一个元素

#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/bind.hpp>

using namespace std;

typedef struct _detail
{
    int y;
}detail;

typedef struct _list
{
    int x;
    detail det;
}list;

std::vector<list> v;
list li[5];

void PushElements()
{
    for(int i = 0; i < 5; i++)
    {
        li[i].x = i+2;
        li[i].det.y = i+3;
        v.push_back(li[i]);
    }
}

void display()
{
    for(int i = 0; i < v.size(); i++)
    {
        cout << v[i].x << " ";
        cout << v[i].det.y << " ";
    }
    cout << endl;
}


void DeleteElement()
{


std::vector<list>::iterator it = std::find_if(v.begin(), v.end(), boost::bind(&list::detail::y, _1) == 3);
v.erase(it);

}

int main()
{
    PushElements();
    display();
    DeleteElement();
    cout << "After Deleting...................." << endl;
    display();

    return 0;
}

编译时我遇到以下错误:

error C3083: 'detail': the symbol to the left of a '::' must be a type
error C2039: 'y' : is not a member of '_list'
error C2065: 'y' : undeclared identifier

我不明白这个错误是什么以及如何解决它。有人可以帮我解决这个错误吗?

1 个答案:

答案 0 :(得分:2)

&list::detail::y

detail是未嵌套在list中的类型的名称。 list type detail成员名为y

我想你想形成一个指向会员的指针,但据我所知,这是不可能的。你最好使用lambda进行比较。类似的东西:

std::find_if(..., ..., [something](const list& l) { return l.det.y == something; } );

另外,在全局命名空间中保留以下划线开头的标识符。 <{1}}和_list并非严格允许。