从C 中的2D集中删除元素

removing an element from a 2d set in c++

本文关键字:删除 元素 集中 2D 中的      更新时间:2023-10-16

我有一个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来对其进行编译,并且似乎工作正常,但我想知道这个错误是什么。

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

似乎在工作,所以我猜想集不允许他说的更改元素。

您正在尝试更改不允许

的键

根据上述评论,解决方案:请勿更改集合中的项目,在概念上更改集合的项目与删除元素并插入新元素相同。因此解决方案是

  • 迭代外套
    • 检查内集是否具有不需要的项目
      • 删除该内部集
      • 从删除的内集中删除不需要的项目
      • 将修改的内部集添加回外套