0

我有一个 2 x 3 的set<set<int> >名称ss,如下所示:

5 6 7
6 7 8

我想删除所有6的 's 并最终像这样:

5 7
7 8

我正在尝试做:

for (set<set<int> >::iterator it = ss.begin(); it != ss.end(); it++) {
    it->erase(6);
}

这给了我一个错误:

error: passing ‘const std::set<int>’ as ‘this’ argument of ‘std::set<_Key, _Compare, _Alloc>::size_type std::set<_Key, _Compare, _Alloc>::erase(const key_type&) [with _Key = int, _Compare = std::less<int>, _Alloc = std::allocator<int>, std::set<_Key, _Compare, _Alloc>::size_type = long unsigned int, std::set<_Key, _Compare, _Alloc>::key_type = int]’ discards qualifiers [-fpermissive]

我可以通过传递编译它-fpermissive,它似乎工作正常,但我想知道这个错误是怎么回事。

在我尝试了海德的建议后编辑:

for (set<set<int> >::iterator it = ss.begin(); it != ss.end(); it++) {
    set<int> temp(*it);
    temp.erase(6);
    ss.erase(*it);
    ss.insert(temp);
}

这似乎有效,所以我猜集合不允许像他说的那样改变元素..

4

2 回答 2

1

根据上面的评论,解决方案:不要更改集合中的项目,更改集合中的项目在概念上与删除元素并插入新元素相同。所以解决方案是

  • 迭代外集
    • 检查内部集是否有不需要的项目
      • 删除那个内部集
      • 从移除的内部集合中移除不需要的项目
      • 将修改后的内部集添加回外部集
于 2012-10-21T14:53:17.043 回答
1

您正在尝试更改不允许的密钥

于 2012-10-21T12:34:03.627 回答