在C ++ Set and Vector

时间:2015-07-03 14:49:15

标签: c++ pointers vector iterator set

我正在编写此代码,我收到此错误:

  

[错误]将'const std :: vector'作为'this'参数传递给'void std :: vector< _Tp,_Alloc> :: push_back(const value_type&)[with _Tp = metastock7,_Alloc = std :: allocator,std :: vector< _Tp,_Alloc> :: value_type = metastock7]'丢弃限定符[-fpermissive]

struct A{
     string name;
     vector<B> rows;
};
set<A, classcomp> set;
vector<B> data; //I filled the vector in my code
std::set<A, classcomp>::iterator it;
std::pair<std::set<A, classcomp>::iterator,bool> ret;
for(int i = 0; i < data.size(); i++){
    A a;
    B b = data[i];
    a.name= b.name;
    ret = set.insert(a);
    it = ret.first;
    (*it).rows.push_back(b); //IT COMPILES WITHOUT
    // it->rows.push_back(mstk7); //fails as well
}

我真的不明白这个错误。你能帮忙吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

std::set是一个有序容器,因此它不允许您直接修改其元素。如果确实如此,您可以使其订购保证无效。

要修改元素,您需要复制它,将其从集合中删除,修改它,然后重新插入。如果您发现自己经常需要这样做,可能需要考虑使用不同的容器类型,尤其是复制std::vector成员可能会变得昂贵。