如何从 C++ 向量中获取 2 个随机(不同)元素

2023-12-20

我想从 std::vector 中获取 2 个随机不同的元素。我怎样才能做到这一点:

  • 它很快(在我的算法中已经完成了数千次)
  • 它是优雅的
  • 元素选择确实是均匀分布的

为了优雅和简单:

void Choose (const int size, int &first, int &second)
{
  // pick a random element
  first = rand () * size / MAX_RAND;
  // pick a random element from what's left (there is one fewer to choose from)...
  second = rand () * (size - 1) / MAX_RAND;
  // ...and adjust second choice to take into account the first choice
  if (second >= first)
  {
     ++second;
  }
}

使用第一个和第二个来索引向量。

对于均匀性来说,这是非常棘手的,因为当大小接近 RAND_MAX 时,将会出现向较低值的偏差,并且如果大小超过 RAND_MAX ,则将存在永远不会被选择的元素。克服这个问题的一种解决方案是使用二分搜索:

int GetRand (int size)
{
  int lower = 0, upper = size;
  do
  {
    int mid = (lower + upper) / 2;

    if (rand () > RAND_MAX / 2) // not a great test, perhaps use parity of rand ()?
    {
       lower = mid;
    }
    else
    {
       upper = mid;
    }
  } while (upper != lower); // this is just to show the idea,
                            // need to cope with lower == mid and lower != upper
                            // and all the other edge conditions

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

如何从 C++ 向量中获取 2 个随机(不同)元素 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何通过spark REST API获取所有作业状态?

    我正在使用 Spark 1 5 1 我想通过 REST API 检索所有作业状态 我使用得到正确的结果 api v1 applications appId 但在找工作的同时 api v1 applications appId jobs得到
  • 金字塔和变色龙中的ajax小部件

    我希望能够在服务器端轻松创建由变色龙和金字塔支持的ajax 小部件 Pyramid 是否提供任何可以使编写小部件变得容易的管道代码 我当前的方法是我有一个使用 home pt 作为渲染器的主视图 home pt 使用宏 base pt 定义
  • 如何在 CUDA 中进行原子加载

    我的问题是如何在 CUDA 中进行原子加载 原子交换可以模拟原子存储 原子加载是否可以以类似的方式廉价地模拟 我可以使用带有 0 的原子添加来自动加载内容 但我认为它很昂贵 因为它执行原子读取 修改 写入而不是仅读取 除了使用volatil
  • android-support-v7-mediarouter 中的 styles.xml 错误

    以下是 android support v7 mediarouter 的 styles xml 文件
  • 如何在多个文件中导入常量

    我有一个包含许多模块的包 每个模块都使用我在每个文件中独立定义的常量 然而 所有这些常数必须彼此一致 所以我尝试在单个文件中定义它们并将其导入每个文件中 当我运行它时 出现未找到常量的错误 他们是让许多其他人导入单个文件并包含常量的干净方法
  • 在 JavaScript 中将 DOM 节点或文档转换为 XML

    假设您在 JavaScript 中收到一个 DOM 元素或文档 例如 window document 您如何将其转换为有效的 XML 更具体地说 对于我的示例 我有一个显示 SVG 的网页 该 SVG 有大量 JavaScript 来允许交
  • Python、tkinter 和导入的类:记录未捕获的异常

    我正在编写一些想要与我的团队共享的脚本 因此我一直在构建一堆日志记录 以便在他们在某个地方遇到崩溃时更容易进行调试 从那时起我就可以看到到底发生了什么崩溃 一般记录到文件没有问题 但我有一个未捕获的异常问题 我尝试了各种方法来让它工作 例如
  • 程序集中的类顺序

    什么决定了程序集中类的顺序 还有 有办法改变它吗 附加信息 您可以自己通过反射检查顺序 也可以使用ILDASM之类的工具 禁用字母排序 然后您也会得到顺序 顺序似乎是由编译器以一种奇怪的方式确定的 我已经尝试了一些事情 例如重命名类 顺序保
  • cakephp 中在哪里定义常量

    我应该在哪个文件中定义特定于我的 cakephp 应用程序的应用程序范围常量 我在 app config bootstrap php 中定义它们 引导 CakePHP 如果您有任何其他配置需求 请使用 CakePHP 的引导文件 该文件位于
  • JBoss 4.2.2 节点开始集群然后互相怀疑

    我有一个在现有 Red Hat 服务器上运行 JBoss 4 2 2 的网站 我正在设置第二台服务器 以便拥有一对集群 然后将进行负载平衡 但是 我无法让它们成功集群 现有服务器启动 JBoss run sh c default b 0 0
  • xslt apply-templates 选择所有剩余的文本节点

    我有这个简化的 xml a b b a
  • 在 C++ 应用程序中使用纯 C(非类包装)函数时是否存在任何问题?

    我计划在 C 应用程序中使用纯 C MPI 库 我不想通过运行例如添加不必要的膨胀 Boost MPI 层将所有内容包装在MPI
  • 如何在Flutter中更改按钮主题的文本颜色

    如果我向我的应用程序添加一个主题 如下所示 class MyApp extends StatelessWidget override Widget build BuildContext context return MaterialApp
  • 使用 _renderItem 类型会破坏自动完成字段

    我有一个 jQuery 自动完成字段 到目前为止一直运行良好 我决定使用 renderItem因为我想在结果中使用一些 HTML 这是我的代码 function prepareClientField var renderItemFuncti
  • Android 中的*窗口焦点*什么时候会改变?

    在我的项目中 我需要捕捉窗口焦点的变化 我已经注销了活动所有阶段的结果 当屏幕亮起时 结果如下 02 17 13 50 03 898 DEBUG InquiryInterface 3829 onCreate screen state fal
  • Java HashMap 调整大小的时间复杂度

    我想知道时间复杂度是多少Java HashMap当负载因子超过阈值时调整大小 据我了解 HashMap 的表大小始终是 2 的偶数次幂 因此每当我们调整表大小时 我们不需要重新散列所有键 如果我错了 请纠正我 我们需要做的就是是分配额外的空
  • 如何将Sentry与.NET 6.0 Worker Service集成?

    我综合了Sentry与 NET Core 6 0工人服务这边走 NuGet 哨兵3 17 1 Program cs using Sentry var sentryDsn Environment GetEnvironmentVariable
  • 处理宏注释时无法访问父级成员

    我有点被以下内容挡住了 宏注释 情况 假设我有一个名为 factory哪个 旨在产生一个apply相应伴随对象中带注释的特征的方法 例如 给定trait A factory trait A val a1 Int 预期生成的代码如下 obje
  • 扩展模板解析器:CodeIgniter...嵌套数组的问题

    我目前正在使用扩展模板解析器库 http codeigniter com forums viewthread 155859 对于代码点火器 我在尝试模板解析嵌套数组时遇到了问题 这是我正在向视图提供的数组 Array users gt Ar
  • 如何从 C++ 向量中获取 2 个随机(不同)元素

    我想从 std vector 中获取 2 个随机不同的元素 我怎样才能做到这一点 它很快 在我的算法中已经完成了数千次 它是优雅的 元素选择确实是均匀分布的 为了优雅和简单 void Choose const int size int fi