somePtr==nullptr ? false : true
如何移除位置i处的元素?我无法使用擦除因为std::set<int> tmp_{30, 40};
int i=0;
while(tmp_[i]==40)
{
i++;
}
tmp_erase(i);
不是i
答案 0 :(得分:2)
[]
运算符未定义为std::set
,因此您无法删除指定位置的元素。您可以使用std::find
按值
std::set<int> tmp_{30, 40};
auto i = std::find(tmp_.begin(), tmp_.end(), 40);
tmp_.erase(i);
erase
也有const key_type& key
的重载,因此您只需使用erase(40)
答案 1 :(得分:1)
您必须使用std::advance将迭代器移动到所需的位置,然后在该迭代器上移动std::set::erase()以删除它指向的项目并重新平衡树:
std::set<int> tmp_{30, 40, 35, 50};
// remove the second element, 35, since set is ordered
auto it = tmp_.begin();
std::advance(it, 1); // to remove 40, advance 2, to remove 50... 3
tmp_.erase(it);
...在关联容器上执行此类操作非常常见,主要是当它们链接到窗口小部件或其他外部线性对象时,但您可能还需要考虑使用{{3如果自动重新排序不是所需的行为或std::unordered_set。
答案 2 :(得分:0)
std :: set是一个关联容器,它们由平衡二叉树在内部实现。
[] 运算符不适用于集合。
你必须使用迭代器在std :: set中搜索元素,或者使用find()函数在set中查找元素然后将其删除。