我知道std :: set不允许非const访问它的项目.我知道将项目移出集合是不可能的 - 因为任何类型的非const访问都可能破坏集合的顺序.
但是,我们可以从集合中删除项目.这不会破坏它,因为它只会强制重组.那怎么回事,我们不能'弹出'一个项目?为什么我不能拿出物品并同时擦掉它?
我问的原因是 - 我需要一个有序的unique_ptrs容器.偶尔我需要从一个容器中"弹出"unique_ptrs并将它们转移到另一个容器中.必须订购它们才是我制作的定制仿函数.
我不明白为什么不应该允许弹出功能?
要从中提取节点,std::set可以使用extract(...)C++ 17中引入的成员函数:
#include <set>
#include <iostream>
int main()
{
std::set<int> set{1, 5, 3, 7, 2};
std::cout << "Original set: ";
for (auto e : set)
std::cout << e << ' ';
std::cout << '\n';
auto first = set.extract(set.begin());
std::cout << "Extracted value: " << first.value() << '\n';
std::cout << "New set: ";
for (auto e : set)
std::cout << e << ' ';
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
Original set: 1 2 3 5 7
Extracted value: 1
New set: 2 3 5 7
Run Code Online (Sandbox Code Playgroud)