c++ - 从 C++ 中的二维集合中删除一个元素

标签 c++ stl set

我有一个 2 x 3 set<set<int> >名为 ss像这样:

5 6 7
6 7 8

我想删除所有 6在里面,结果是这样的:

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 来编译它它似乎工作正常,但我想知道这个错误是怎么回事。

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

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);
}

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

最佳答案

您正在尝试更改不允许的 key

关于c++ - 从 C++ 中的二维集合中删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997789/

相关文章:

c++ - 创建分类音乐库的有效方法

c++ - 如何为 C++ 类和结构自定义 STAsertEquals 输出?

c++ - vector <bool>常量成员函数

c++ - 检查值是否在集合 p1 和 p2 中但不在 p3 中

java - 哪个更快?检查一个元素是否已经在集合中,如果没有添加它或者只是添加它?

c++ - 氧气警告 : ignoring unknown tag

c++ - 为什么这个程序无法捕获异常?

c++ - 将加密数据保存在内存中

java - Hibernate - 如何映射 EnumSet

python - Python 中的成对集交集