为什么无法“弹出”来自std :: set的项目?

雷神科雷亚

我知道std :: set不允许非常量访问它的项目。我知道项目移出集合是不可能的,因为任何类型的非常量访问都可能破坏集合的顺序。

但是,我们可以从集合中删除一个项目。这不会破坏它,因为它只是强制集合进行重组。那么,为什么我们不能“弹出”一个项目呢?为什么我不能取出物品并同时擦除它?

我要问的原因是-我需要一个有序的unique_ptrs容器。有时,我需要从一个容器中“弹出” unique_ptrs,然后将其转移到另一个容器中。必须将它们订购为我制作的自定义函子。

我不明白为什么不应该允许弹出功能?

v

要从中提取节点,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的项目中无法使用Android支持库?

为什么在我的项目中无法等待Task <HttpResponseMessage>?

是否可以将项目移出std :: set?

为什么我的Xcode无法验证快速的iOS项目

为什么我无法打开VS项目

如果无法修改set元素,为什么std :: set提供begin()和end()

为什么intelij无法识别Java项目?

在std :: set中存储指向项目的指针安全吗?

为什么我的IDEA项目无法构建?

为什么Bitbucket无法构建我的JFX项目?

为什么不能将std :: function用作std :: set或std :: unordered_set值类型?

Travis CI为什么无法构建Python项目?

为什么std :: initializer_list复制项目?

对范围项目使用std :: set容器

为什么在弹出的CRA项目中需要这些特定的软件包

为什么从ngRx状态获取的项目副本无法修改?

为什么std :: set_difference无法删除重复项?

为什么NPM运行弹出查看所有项目文件夹?

为什么std :: swap无法在模板项目上使用?

为什么Facebook SDK无法导入我的Android项目?

为什么无法通过IndexOf()找到CheckedListBox中存在的项目?

为什么此Makefile无法构建项目?

为什么我的github项目无法上线?

为什么CSS无法在MVC项目中正常工作?

为什么无法在模块中访问父项目类

为什么我的项目无法将Firebase视为导入

为什么我无法从.NET项目中删除nuget包?

为什么我的Android Studio项目无法同步?

如何在不使用 SPOP <set> <count> 的情况下以原子方式从 REDIS SET 中弹出多个项目?