我正在编写此代码,我收到此错误:
[错误]将'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
}
我真的不明白这个错误。你能帮忙吗?
谢谢。
答案 0 :(得分:2)
std::set
是一个有序容器,因此它不允许您直接修改其元素。如果确实如此,您可以使其订购保证无效。
要修改元素,您需要复制它,将其从集合中删除,修改它,然后重新插入。如果您发现自己经常需要这样做,可能需要考虑使用不同的容器类型,尤其是复制std::vector
成员可能会变得昂贵。