生成未排序的唯一数据C++
Generate Unsorted Unique Data C++
我有C++中的矢量代码,如下所示:
for(int i=0;i<10000;i++)
{
vec.push_back(i);
}
现在,vec中的值在[00999]范围内按排序,并且是唯一的。如何以未排序的方式生成[00999]范围内的相同唯一数据。
请帮帮我。
在C++11之前,使用标准库实现这一点的方法是:
for(int i=0;i<10000;i++)
{
vec.push_back(i);
}
//http://www.cplusplus.com/reference/algorithm/random_shuffle/
std::random_shuffle(vec.begin(), vec.end());
C++11/14具有更好的随机数生成器,但应优先使用std::shuffle()
。
一种方法是使用std::shuffle,如下所示:
for(int i=0;i<10000;i++)
{
vec.push_back(i);
}
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(vec.begin(), vec.end(), g);
一种更"有趣"的方法是在循环中创建一个线性同余生成器(LCG)来获得随机值。
/**
* Linear congruent generator for unrepeated values
* x = ( a * x + b ) % M
* a = 1103515245
* b = 12345
* M = 10000
*/
for(int i = 0, int x = 0; vec.size != 10000 ; x = (x * 1103515245 + 12345) % 10000) {
if(std::find(vec.begin(), vec.end(), x) != vec.end()) {
/* vec contains x, do nothing */
} else {
/* vec does not contain x */
vec.push_back(x);
}
}
挑战是选择好的a、b、M参数,以在序列中获得更多的随机性。
注意这是一个未准备好生产的代码。如果您正在寻找复制/粘贴解决方案,请阅读其他答案。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 何时在引用或唯一指针上使用移动语义
- 使用流处理接收到的数据
- C++:如果 std::atomic_flag 是唯一的无锁原子类型,如何在C++中实现无锁数据结构?
- 尝试使用while循环从文件中读取数据.还必须检查以确保第一个和唯一的值不是-1
- 不确定是否在单链表中显示唯一数据
- 递归类型真的是构建不连续的任意大小数据结构的唯一方法吗
- 唯一数据的排序算法
- 用于存储唯一<键,值>元组的数据结构,其中<value>最小值
- 用大量唯一数据填充 c++ 中的嵌套结构
- 有没有办法从下面的数据中唯一地构建一个整数
- 读取唯一数据
- C++数据结构,用于存储两组唯一元素之间的多个关系
- 在继承的情况下,每个类的静态数据成员是唯一的
- 在两个数据结构中保持相同的唯一指针
- 生成未排序的唯一数据C++
- 反向C++的唯一数据
- C++ "for loop"将数据保存在数组中,然后写入文件唯一数据