uniform_int_distribution使用列表而不是值范围
uniform_int_distribution using a list instead of a range of values
我在尝试运行代码后查找了文档和示例,但找不到将列表输入uniform_int_distribution
的方法。那这甚至是不可能的吗?
有没有人对不使用srand()
或rand()
从给定列表中随机选择项目的最佳方法有任何建议?
您可以使用
uniform_int_distribution
生成正确范围内的随机数,然后使用std::next
选择列表中的元素,例如:
#include <algorithm>
#include <iostream>
#include <list>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 rng(rd());
std::list<char> lst{'a', 'b', 'c', 'd'};
std::uniform_int_distribution<std::size_t> uid(0, lst.size() - 1); // range [0, size-1]
std::size_t pos = uid(rng); // random index in the list
auto elem = *std::next(lst.begin(), pos); // pick up the element
std::cout << elem << std::endl; // display it
}
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 如何计算数据类型的范围,例如int
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 超出 int 的值范围后的无限循环
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- 为什么 rand() 的范围比 int 的范围小?
- 从'::size_t'转换为'int'需要缩小转换范围
- std::vector<std::vector<int>>:调试断言失败。C++矢量下标超出范围保留内存
- C++. 面试. 关于返回 int* 值问题的范围
- 为什么所有可能的整数都"true"在 C++ 的 if 语句内的 long int 范围内,而 0 不是?
- 如何在给定范围内找到 std::set<pair<int、int> > 中的最大值?
- 当偏移太大(大于签名的INT 2^32范围)时,GZSEEK(ZLIB)失败
- 从'double'转换为'int'需要缩小转换范围
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 如何编写一个 boost::spirit::qi 解析器来解析从 0 到 std::numeric_limits:<int>:max() 的整数范围?
- C 使用单个生成器从多个范围内提升随机INT
- char *argv []和int argc c 的全局覆盖范围
- C++int出现次数,范围未知
- 从幻数到int或long的重载分辨率(范围为v3)
- 将 std::vector<int> 设置为一个范围