繁体   English   中英

在 C++ Set 和 Vector 中取消引用迭代器时出错

[英]Error dereferencing an iterator in C++ Set and Vector

我正在编写此代码,但出现此错误:

[错误] 将 'const std::vector' 作为 '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
}

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

谢谢你。

std::set是一个有序的容器,所以它不允许你直接修改它的元素。 如果是这样,您可以使其排序保证无效。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM