C++ 从c+中的二维集合中删除元素+;

C++ 从c+中的二维集合中删除元素+;,c++,stl,set,C++,Stl,Set,我有一个2乘3的集合名为ss如下: 5 6 7 6 7 8 5 7 7 8 我想删除其中的所有6,结果如下: 5 6 7 6 7 8 5 7 7 8 我正在努力做到: for (set<set<int> >::iterator it = ss.begin(); it != ss.end(); it++) { it->erase(6); } 这似乎起作用了,所以我猜集合不允许像他说的那样更改元素。您正试图更改不允许更改的键。根据上面的评论,解决方案:

我有一个2乘3的
集合
名为
ss
如下:

5 6 7
6 7 8
5 7
7 8
我想删除其中的所有
6
,结果如下:

5 6 7
6 7 8
5 7
7 8
我正在努力做到:

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

这似乎起作用了,所以我猜集合不允许像他说的那样更改元素。

您正试图更改不允许更改的键。

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

  • 迭代外集
    • 检查内部集合是否有不需要的项
      • 拆下那套内部装置
      • 从移除的内部集合中移除不需要的项目
      • 将修改后的内部集合添加回外部集合

也许集合不是您需要的数据结构。你首先想要实现什么?这是你真正的代码吗?您的编译器抱怨它指向一个常量集。@alestanis这是我的代码的简化版本,但我在原始代码中也遇到了同样的错误。@moooeeep我正试图消除2d集中的所有
6
。集合比向量更有意义,因为它是sat解算器的一部分。我的意思是:你的真实代码中没有任何
const
s?你确定吗?这是允许的。我的意思是:我刚刚试着从原始集合创建一个临时2d集合,并对其进行迭代,同时从原始集合中找到迭代器值,然后对其进行删除。仍然有相同的错误..但这不应该是
擦除的问题,因为你没有搞砸排序哦,我知道了,错误来自大集合,不是从内部集合…我已经将skwllsp的答案标记为已接受,这也是正确的答案,除此之外,所有答案都更干净,帮助我找到了解决方案,再次感谢。。改变前检查听起来也是个好主意,我会试试看。@Gokchehan是的,我在写这个答案之前看到了这一点,所以接受没有问题。