我知道std :: set不允许非常量访问它的项目。我知道将项目移出集合是不可能的,因为任何类型的非常量访问都可能破坏集合的顺序。
但是,我们可以从集合中删除一个项目。这不会破坏它,因为它只是强制集合进行重组。那么,为什么我们不能“弹出”一个项目呢?为什么我不能取出物品并同时擦除它?
我要问的原因是-我需要一个有序的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';
}
输出:
Original set: 1 2 3 5 7
Extracted value: 1
New set: 2 3 5 7
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句