保留 std::set 或 std::unordered_set 上的插入顺序

2024-02-19

在将其标记为重复之前,我已经here https://stackoverflow.com/questions/1098175/a-stdmap-that-keep-track-of-the-order-of-insertion, here https://stackoverflow.com/questions/31942783/need-stl-set-in-insertion-order, and 这里是第一个的副本 https://stackoverflow.com/questions/6278580/stl-container-that-preserves-order-of-insertion-but-allows-no-duplicates.

我知道boost::multi_index,并使用我缺乏的环境,并且std::unordered_set并不一定要以确定的插入顺序存储元素。

我发现使用两个容器的概念,比如说一个额外的std::vector粗鲁无礼。

What I 会爱是一个涉及比较器的解决方案,我可以在std::set的模板参数(澄清一下,这可能是一个简单的函子结构,包含一个bool operator()()重载、常规函数或 lambda)。是否可以?

Addenda

  1. 初始化必须通过 std:: 容器的开始迭代器/结束迭代器构造函数进行,如本代码片段所示。

    std::string str; cin >> str;
    std::set<char>(str.begin(), str.end());
    
  2. 此外,另一个有趣的用例是创建一个哑散列包装函子,允许将插入顺序推入std::unordered_set的模板参数。


您不能直接将 lambda 表达式作为集合的模板参数,因为 lambda 表达式是一个值,而集合的模板参数是一个类型。问题的明显修正,是否使用 lambda 和decltype可以工作,导致一个有趣的问题,即 lambda 表达式表示一个uniquetype (“闭包类型”),因此您永远不能创建同一闭包类型的两个单独的 lambda 表达式。*

然而,从更抽象的意义上讲,您可以使用模板参数推导在本地上下文中实现您想要的目标,例如:

template <typename F>
int f(int* first, int* last, F comp)
{
    std::set<int, F> s(comp);
    while (first != last) s.insert(*first++);
    ...
}

现在你可以打电话f以 lambda 表达式作为参数,因此有效地“使用 lambda 作为集合的比较器”。或者,对于一个更简单的示例,您可以为 lambda 指定一个命名变量(将所有模板推导放入一个auto:

auto comp = [](...) { ... };
std::set<int, decltype(comp)> s(comp);

*) There is a proposal to allow lambdas in unevaluated contexts to address this point, but its outlook is uncertain. It has interesting side effects like making closure types affect name mangling.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保留 std::set 或 std::unordered_set 上的插入顺序 的相关文章

  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 使用restsharp序列化对象并将其传递给WebApi而不是序列化列表

    我有一个看起来像的视图模型 public class StoreItemViewModel public Guid ItemId get set public List
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作

随机推荐

  • 具有当前行条件的 Spark 窗口函数

    我正在尝试计算给定的order id过去 365 天内有多少订单已付款 这不是问题 我使用窗函数 https databricks com blog 2015 07 15 introducing window functions in sp
  • JVM 中的最大线程数?

    Java虚拟机最多可以维护多少个线程 我在最初的问题中没有解释这一点 但我正在尝试对 JVM 进行基准测试 并想尝试看看它可以同时维护多少个线程 在循环中创建线程直到引发异常是一种选择 但是 我想知道是否有更好的方法来执行此操作 您的操作系
  • glassfish autodeploy 通过简单的应用程序给出 404

    我安装了普通 glassfish v3 并将我的 war 放入C glassfishv3 glassfish domains domain1 autodeploy我的 Windows PC 的文件夹 战争包含一个用 java JSF ric
  • java.net.SocketException:recvfrom失败:ECONNRESET(连接由对等方重置)

    我在 Android 中有一个 HTTP 服务器 我为每个 HTTP 请求创建一个新线程 如提到的链接中所示 http hc apache org httpcomponents core ga httpcore examples org a
  • 在 vue-formulate 的嵌套组中使用空列表

    我正在使用 vue 和 vue Formulate 并想要构建一个带有嵌套组 https vueformulate com guide inputs types group 例如 我有一个用户 外部组 每个用户可以有一个标签列表 内部组 标
  • 从 kotlin 创建新的节点模块对象

    我正在尝试用 Kotlin 编写一个小型的 node js 应用程序来测试和使用 javascript 互操作 从公开原型 Bar 的外部节点模块 foo 我尝试创建 Bar 的新实例 在Javascript中我会简单地写一些类似的东西 v
  • 在 Angular 中使用源映射生成生产版本 - CLI

    生产构建后如何保留源映射 现在 我的命令如下所示 build prod ng build app release prod cp R lang dist 我尝试将其更改为 ng build app release sourceMap tru
  • 如何获得定义频带内的所有 fft bin 数量?

    我用的是matlab软件 对于我的问题 我有一个音频信号 我正在其上应用 STFT 我取一段 46 ms specifially chosen 我的信号消失了y audio signal 并使用FFT在上面 然后我进入下一段 直到音频信号结
  • 有可用的 FreeRTOS 解释语言库吗?

    我在一家公司工作 该公司使用 FreeRTOS 为多个设备创建固件 最近 我们对新功能的要求已经超出了我们固件工程师的工作能力 但我们现在也无力雇用任何新人 即使进行微小的更改 也需要固件人员在非常低的级别上进行修改 我一直在为 FreeR
  • 如何使用textview.getLayout()?它返回空值

    我正在尝试设置布局textview所以我可以用getEllipsisCount 方法 但下面的代码返回 null 作为布局值 我如何进行布局然后使用getEllipsisCount 0 method public class MainAct
  • Matlab中使用滑块旋转图像

    我在 Matlab 中有一个 GUI 使用 GUIDE 它看起来是这样的 我想使用滑块旋转图像并实时显示变化 我使用轴来显示图像 我怎样才能做到这一点 EDIT 我正在构建 OCR 应用程序 这就是我旋转盘子时的样子 数字完全变形了 tha
  • Mac osx 10.9.2 上的 mysql-python:错误:命令“/usr/bin/clang”失败,退出状态为 1

    我想将我的 django 应用程序从 sqlite 移植到 mysql 但是当我尝试安装 mysql python 时 它给了我这个错误 错误 命令 usr bin clang 失败 退出状态为 1 我四处寻找线索并尝试了这个似乎对大多数人
  • 如何将数据从控制器传递到 ASP.net MVC 中的视图? [复制]

    这个问题在这里已经有答案了 net MVC 我需要做的事情对于我认识的每个人来说都很简单 我需要在控制器之间传递数据以在 ASP net MVC 中查看 我在控制器中编写的代码 public ActionResult Upload View
  • Bundler 未加载 gem

    我在使用 Bundler 和能够访问我的宝石而不需要在某个地方需要它们时遇到了问题 因为config gem曾经为我这样做过 据我所知 在我的 Rails 3 应用程序中 我定义了我的Gemfile像这样 clear sources sou
  • 如何用按钮更新闪亮的数据表

    我试图在用户按下 Shiny 中的按钮后简单地更新数据框的列 我对当前显示的数据帧如何传递到服务器端函数有点困惑 一旦按下按钮 列 cyl 应增加 10 如果再次按下按钮 列应采用重新计算的值并再乘以 10 依此类推 到目前为止 我已经做到
  • 如何使用 Javascript 从 JSON 文件中选择随机对象(?)?

    在我正在制作的 Discord Bot 中 它需要从 JSON 文件中选择一个随机对象 我当前的代码是这样的 function spawn if randomNum 24 return const name names randomNum
  • UISearchBar 范围栏位置?

    我在使用 iPad 应用程序 我想知道是否可以将范围栏从 UISearchBar 的右侧移动到另一个位置 我希望将范围栏放在搜索栏下方 那可能吗 提前致谢 好的 这是我的解决方案 我将实现我自己的分段控件来创建搜索范围的可能性 let ca
  • 反应本机本地通知

    我是 React Native 的新手 需要实现一个功能 应用程序需要每天在特定时间向用户发送通知 每天要显示的数据存储在客户端的json文件中 不会改变 通知已按计划进行 鉴于我希望有一种方法可以从应用程序本身触发通知 有谁知道无需将应用
  • 访问相机和照片库

    在我的 iOS 应用程序中 我有一个 ImageView 和两个用于打开相机和照片库的按钮 当我单击其中一个按钮时 应用程序将关闭 我在我的设备上运行应用程序 而不是模拟器 我的代码需要更改什么 class PhotoViewControl
  • 保留 std::set 或 std::unordered_set 上的插入顺序

    在将其标记为重复之前 我已经here https stackoverflow com questions 1098175 a stdmap that keep track of the order of insertion here htt