在 C++ 中使用 std::set 时,我发现从集合中删除项目的唯一方法是使用擦除方法。这会删除有问题的项目,这是我不希望发生的情况。我能想到的从集合中删除项目而不删除它的唯一方法是创建一个新集合并迭代地将旧集合的所有项目添加到其中,确保不添加需要从中删除的项目集,然后删除旧集。
有没有更干净的方法来做到这一点?
让我们看一个std::unordered_set的std::unique_ptr<T>作为一个例子.我可以在其他位置移动该组的元素吗?
#include <unordered_set>
#include <iostream>
#include <memory>
#include <vector>
int main()
{
std::unordered_set<std::unique_ptr<int>> mySet;
mySet.insert(std::make_unique<int>(1));
mySet.insert(std::make_unique<int>(2));
mySet.insert(std::make_unique<int>(3));
std::vector<std::unique_ptr<int>> myVector;
for (auto&& element : mySet)
{
std::cout << *element << std::endl;
//myVector.push_back(element); won't compile as you can only get a const ref to the key
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个非常实用的代码示例,我想这样做,但我减少使用a std::shared_ptr.你知道另一个(更好吗?)的选择吗?