Generating small range of different random numbers?

Ziezi

I am trying to generate a short range of (about 20) different / unique random numbers.

Here is what I have now:

unique_random.h:

#ifndef UNIQUE_RANDOM_H
#define UNIQUE_RANDOM_H

// generates a pseudo-random number in [min, max]
int random_number (unsigned int min, unsigned int max) {
    static bool seed_initialized = false;

    if (!seed_initialized) {
        seed_initialized = true;
        srand((unsigned int) time(NULL));
    }

    return rand() % (max - min + 1) + min; 
} 

// generates a random number different from the previously generated
int random_number_without_these (int min, int max, std::set<int>& generated) {
    int res = random_number (min, max);

    // if res one of the previous, generate again
    while (s.find(res) != s.end()) {
        res = random_number (min, max);
    }

    return res;
}

#endif

then the above functions would be called like so:

main.cpp:

#include <iostream>
#include <time.h>
#include <set>

#include "unique_random.h" 

int main() {

    std::set<int> already_generated;

    for (auto i = 0; i < 20; ++i) {

        int rand =  random_number_without_these(1,20, already_generated);
        already_generated.insert(rand);
    }

}

where the expected result is that there have been generated 20 consecutively unique values. What I have written now needs two functions, random_number_without_these(), random_number() and a container, set<int>, in order to work, that is why I am wondering:

Is there an easier way to generate short range of unique random numbers, possibly along the lines of the existing code?

Some programmer dude

Using std::set and e.g. std::uniform_int_distribution it's actually very easy:

#include <iostream>
#include <set>
#include <random>

std::set<int> generate_numbers(const int min, const int max, const int count)
{
    std::set<int> numbers;
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(min, max);

    while (numbers.size() < count)
    {
        numbers.insert(dis(gen));
    }

    return numbers;
}

int main()
{
    auto numbers = generate_numbers(1, 20, 20);
    for (auto const v : numbers)
    {
        std::cout << v << ' ';
    }
    std::cout << '\n';
}

I just don't see the sense in using std::set since that will keep all the values sorted, and you could just use a simple loop to generate the numbers, or std::iota. Using std::unordered_set I can see the point though.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Generating random numbers in a particular range

From Dev

Generating different combinations of random numbers

From Dev

Generating decimal random numbers in Java in a specific range?

From Java

Generating random whole numbers in JavaScript in a specific range?

From Dev

Generating random numbers over a range in Go

From Dev

Generating and storing unique and random numbers within a range

From Dev

Generating random numbers in specific binary range

From Dev

Generating 2 Random Numbers that are Different C#

From Dev

Generating two identical random numbers and one that is different

From Dev

C++11 Generating random numbers from frequently changing range

From Dev

Generating uniformly distributed random numbers within a range in C++

From Dev

Generating Random numbers and printing "Done!" if they fall within a range in C

From Dev

Generating random evenly divisible numbers within a specific range in C++?

From Java

Generating random numbers with Swift

From Dev

Generating random numbers in Haskell

From Dev

Generating unique random numbers

From Dev

Generating weighted random numbers

From Dev

Generating random poll numbers

From Dev

Generating groups of random numbers

From Dev

Generating unique random numbers

From Dev

Generating a set of random numbers

From Dev

Generating sequence of random numbers

From Dev

Generating random numbers randomly

From Dev

Generating random numbers on different input texts and ensuring random numbers shown are unique

From Dev

Outputting 20 different random numbers within a range using php

From Dev

Generating random numbers of exponential distribution

From Dev

Random generating numbers on a given ratio

From Dev

Generating Random Numbers for RPG games

From Dev

Generating random numbers without repeats

Related Related

  1. 1

    Generating random numbers in a particular range

  2. 2

    Generating different combinations of random numbers

  3. 3

    Generating decimal random numbers in Java in a specific range?

  4. 4

    Generating random whole numbers in JavaScript in a specific range?

  5. 5

    Generating random numbers over a range in Go

  6. 6

    Generating and storing unique and random numbers within a range

  7. 7

    Generating random numbers in specific binary range

  8. 8

    Generating 2 Random Numbers that are Different C#

  9. 9

    Generating two identical random numbers and one that is different

  10. 10

    C++11 Generating random numbers from frequently changing range

  11. 11

    Generating uniformly distributed random numbers within a range in C++

  12. 12

    Generating Random numbers and printing "Done!" if they fall within a range in C

  13. 13

    Generating random evenly divisible numbers within a specific range in C++?

  14. 14

    Generating random numbers with Swift

  15. 15

    Generating random numbers in Haskell

  16. 16

    Generating unique random numbers

  17. 17

    Generating weighted random numbers

  18. 18

    Generating random poll numbers

  19. 19

    Generating groups of random numbers

  20. 20

    Generating unique random numbers

  21. 21

    Generating a set of random numbers

  22. 22

    Generating sequence of random numbers

  23. 23

    Generating random numbers randomly

  24. 24

    Generating random numbers on different input texts and ensuring random numbers shown are unique

  25. 25

    Outputting 20 different random numbers within a range using php

  26. 26

    Generating random numbers of exponential distribution

  27. 27

    Random generating numbers on a given ratio

  28. 28

    Generating Random Numbers for RPG games

  29. 29

    Generating random numbers without repeats

HotTag

Archive