fork(3) download
  1. #include <iostream>
  2. #include <memory>
  3. #include <numeric>
  4. #include <random>
  5. #include <unordered_map>
  6.  
  7. int main() {
  8. constexpr std::size_t min = 12345;
  9. constexpr std::size_t max = 87654321;
  10. constexpr std::size_t size = 8;
  11.  
  12. std::random_device device;
  13. std::mt19937 engine{device()};
  14. std::unique_ptr<std::size_t[]> array{new std::size_t[size]};
  15. std::unordered_map<std::size_t, std::size_t> map;
  16.  
  17. map.reserve(max - min - size + 1);
  18. std::iota(array.get(), array.get() + size, min);
  19.  
  20. for (std::size_t i = 0; i != size; ++i) {
  21. std::uniform_int_distribution<std::size_t> dist{i, max - min};
  22. auto index = dist(engine);
  23. std::swap(array[i], index < size
  24. ? array[index]
  25. : map.insert({index, min + index}).first->second);
  26. }
  27.  
  28. if (size != 0) {
  29. std::cout << array[0];
  30. for (size_t i = 1; i != size; ++i) std::cout << ", " << array[i];
  31. std::cout << "\n";
  32. }
  33. }
  34.  
Success #stdin #stdout 0.55s 3276KB
stdin
Standard input is empty
stdout
31604388, 16498194, 37456527, 10150801, 8115387, 32787686, 776314, 2529923