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

2024-01-10

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

[错误] 将 'const std::vector' 作为 'void std::vector<_tp _alloc>::push_back(const value_type&) 的 'this' 参数传递 [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会员可能会变得昂贵。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ Set 和 Vector 中取消引用迭代器时出错 的相关文章

随机推荐