使用 boost::random 作为 std::random_shuffle 的 RNG

2023-11-26

我有一个程序,使用来自 boost::random 的 mt19937 随机数生成器。我需要进行 random_shuffle 并希望为此生成的随机数来自此共享状态,以便它们可以相对于梅森扭曲器先前生成的数字具有确定性。

我尝试过这样的事情:

void foo(std::vector<unsigned> &vec, boost::mt19937 &state)
{
    struct bar {
        boost::mt19937 &_state;
        unsigned operator()(unsigned i) {
            boost::uniform_int<> rng(0, i - 1);
            return rng(_state);
        }
        bar(boost::mt19937 &state) : _state(state) {}
    } rand(state);

    std::random_shuffle(vec.begin(), vec.end(), rand);
}

但我收到一个模板错误,用 rand 调用 random_shuffle 。然而这有效:

unsigned bar(unsigned i)
{
    boost::mt19937 no_state;
    boost::uniform_int<> rng(0, i - 1);
    return rng(no_state);
}
void foo(std::vector<unsigned> &vec, boost::mt19937 &state)
{
    std::random_shuffle(vec.begin(), vec.end(), bar);
}

可能是因为它是一个实际的函数调用。但显然这并不能阻止原始梅森扭曲器的状态。是什么赋予了?有没有办法在没有全局变量的情况下完成我想做的事情?


在评论中,罗伯特·古尔德要求为后代提供一个工作版本:

#include <algorithm>
#include <functional>
#include <vector>
#include <boost/random.hpp>

struct bar : std::unary_function<unsigned, unsigned> {
    boost::mt19937 &_state;
    unsigned operator()(unsigned i) {
        boost::uniform_int<> rng(0, i - 1);
        return rng(_state);
    }
    bar(boost::mt19937 &state) : _state(state) {}
};

void foo(std::vector<unsigned> &vec, boost::mt19937 &state)
{
    bar rand(state);
    std::random_shuffle(vec.begin(), vec.end(), rand);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 boost::random 作为 std::random_shuffle 的 RNG 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况

随机推荐

  • 所以在java中你不能有具有不同返回值和参数的重复方法名称?

    Java中是否可以有两个名称相同但参数和返回类型不同的方法 看起来这将是概括一个简单的 getter 和 setter 的好方法 您可以使用构造函数来做到这一点 为什么不使用常规方法呢 例如 为什么不能做 int getVal return
  • 将 Sencha Cmd 与动态加载的控制器结合使用

    我使用 Ext JS 4 创建了一个应用程序 controllers我的财产app js仅包含主控制器 Ext application name MyApp appFolder app controllers main App loadCo
  • 使用 Selenium WebDriver 和 python 按下 ENTER 键[重复]

    这个问题在这里已经有答案了 如何使用 selenium python 绑定模拟 ENTER 按键 我已经尝试过以下块 但它不起作用 driver find element by xpath html xxxxx send keys keys
  • 如何从 sklearn 反转标签编码器以获取多列?

    我想在多列上使用 LabelEncoder 的 inverse transform 函数 这是我在数据帧上应用 LabelEncoder 时用于多个列的代码 class MultiColumnLabelEncoder def init se
  • matplotlib 3d 表面上的连续阴影

    在 matplotlib 3D 图中 我可以设置行 列数来确定表面上可见的面总数 s ax plot surface x y z color gray shade True rstride 1 cstride 1 其中 rstride 和
  • 使用 ORDER BY 子句的替代结果

    CREATE TABLE TEST customername varchar 50 INSERT INTO TEST VALUES CUSTOMER 1 INSERT INTO TEST VALUES CUSTOMER 1 INSERT I
  • 如何在 jsoup 中获取元素的第一级子元素

    在jsoup中Element children 返回 Element 的所有子元素 后代 但是 我想要元素的第一级子级 直接子级 我可以使用哪种方法 Element children 仅返回直接子元素 既然你把他们绑在树上 他们也会有孩子
  • 如何创建接受不超过 10 位数字的正则表达式?

    如何创建接受不超过 10 位数字的正则表达式 thanks 既然你问了 如何 我将尝试逐步解释 因为您没有指定您正在使用哪种正则表达式风格 所以我将在PCRE and 两个 POSIX 正则表达式变体 For simple在这种情况下 您应
  • 使用 iPhone 音频适配器传输数据

    我刚刚开始在一家生物医学公司工作 我们需要将我们正在制造的设备中的数据传输到 iPhone 显然 使用 iPhone 程序就足够了 但对于原型设计和更简单的解决方案 我想知道我们是否可以使用现有的蓝牙音频发射器 例如 http www bu
  • python高效子字符串搜索[重复]

    这个问题在这里已经有答案了 可能的重复 string find 在 CPython 中是如何实现的 我在堆栈溢出中阅读了许多文章 比较了子字符串搜索的性能 例如Python字符串搜索效率 这是搜索子字符串最有效的方法吗 python 中的子
  • RecyclerView:如何创建插入动画效果?

    我有一个ReyclerView与一个LinearLayoutManager and an Adapter
  • 如何将MySQLi结果集加载到二维数组中?

    我的 mysqli 结果集有问题 我有一个包含一堆消息的表 表中的每一行代表一条消息 我有一些列 例如 ID 标题 正文和 公共 公共列包含布尔值 指定消息是向所有人显示还是仅向发布者显示 我有一个页面 我想在其中显示所有公共消息 如果您单
  • 无法将下载的文件存储在相关文件夹中

    我用 python 结合 selenium 编写了一个脚本 用于从网页下载一些文档文件 以 doc 结尾 我不想使用的原因requests or urllib下载文件的模块是因为我当前正在玩的网站没有任何真实的网址连接到每个文件 它们是 J
  • 大图像的语义分割

    我正在处理数量有限的大尺寸图像 每个图像都可以有3072 3072像素 为了使用 FCN 或 U net 训练语义分割模型 我构建了一个大样本的训练集 每个训练图像是128 128 在预测阶段 我所做的是将大图像切成小块 与训练集相同128
  • Spring:如何使用@Value注释注入内联字符串列表[重复]

    这个问题在这里已经有答案了 如何使用注入字符串值列表 Value注解 我正在使用 Spring 4 1 2 我试过了 Value value top person organizationalPerson user private List
  • 从另一个 Activity 导航回来时,Android Activity onCreate 被调用两次

    我有一个应用程序 可以在用户在 webview 活动上使用 OAuth 进行身份验证后生成音乐 看起来像这样 主要播放器活动 OAuth 活动 返回主要播放器活动 但是 当从 OAuth 活动中调用 onCreate 方法时 会调用两次 导
  • 如何通过Delphi 7上传文件到dropbox?

    我尝试将文件上传到保管箱 我使用 dropbox apihttps www dropbox com developers reference api files POST procedure TDropbox Upload2 const U
  • 读/写 QObject

    I think我可以写一个QObject像这样利用Q PROPERTYs QDataStream operator lt lt QDataStream ds const Object obj for int i 0 i
  • ASP.NET 应用程序保持运行时浏览器超时

    我遇到了一种情况 ASP NET 需要很长时间才能生成网页回复 超过 2 小时 这是由于代码隐藏运行了一段时间 非常长 缓慢的循环 浏览器 IE 和 Firefox 停止等待回复 大约一个小时后 并给出一般的无法显示网页错误 类似于您尝试导
  • 使用 boost::random 作为 std::random_shuffle 的 RNG

    我有一个程序 使用来自 boost random 的 mt19937 随机数生成器 我需要进行 random shuffle 并希望为此生成的随机数来自此共享状态 以便它们可以相对于梅森扭曲器先前生成的数字具有确定性 我尝试过这样的事情 v