我有一个名为set<set<int> >
的2乘3 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
来编译它,它似乎工作正常,但我想知道这个错误到底是什么。
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);
}
这似乎正在起作用所以我猜测套装不允许改变元素,因为他说..
答案 0 :(得分:1)
您正在尝试更改不允许的密钥
答案 1 :(得分:1)
根据上述评论,解决方案: 不要更改集合中的项目,更改集合中的项目在概念上与删除元素和插入新元素相同。所以解决方案就是