fork download
  1. #include <cstdlib>
  2. #include <ctime>
  3.  
  4. #include <algorithm>
  5. #include <deque>
  6. #include <iomanip>
  7. #include <iostream>
  8. #include <map>
  9. #include <random>
  10. #include <set>
  11. #include <sstream>
  12. #include <string>
  13. #include <utility>
  14.  
  15. using namespace std;
  16.  
  17. #define DBG(x) { cout << left << setw(40) << #x << (x) << endl; }
  18.  
  19. class LosowanieBezPowtorzen
  20. {
  21. public:
  22. LosowanieBezPowtorzen(std::set<int> wartosci) : wartosci_(move(wartosci)) {}
  23.  
  24. LosowanieBezPowtorzen(initializer_list<int> l) : wartosci_(l) {}
  25.  
  26. template<typename Gen>
  27. int losuj(Gen&& gen){
  28. if(wartosci_.size() == 0)
  29. throw out_of_range("Skonczyly sie wartosci do losowania");
  30.  
  31. uniform_int_distribution<int> dis(0,wartosci_.size()-1);
  32. auto it = begin(wartosci_);
  33. advance(it,dis(gen));
  34. int ret = *it;
  35. wartosci_.erase(it);
  36. return ret;
  37. }
  38.  
  39. private:
  40.  
  41. std::set<int> wartosci_;
  42. };
  43.  
  44. int main()
  45. {
  46. mt19937_64 gen(random_device{}());
  47.  
  48. LosowanieBezPowtorzen l{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
  49.  
  50. for(int i = 0; i < 20; i++){
  51. DBG(l.losuj(gen));
  52. }
  53. }
  54.  
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
l.losuj(gen)                            17
l.losuj(gen)                            7
l.losuj(gen)                            13
l.losuj(gen)                            9
l.losuj(gen)                            22
l.losuj(gen)                            3
l.losuj(gen)                            8
l.losuj(gen)                            1
l.losuj(gen)                            20
l.losuj(gen)                            23
l.losuj(gen)                            6
l.losuj(gen)                            12
l.losuj(gen)                            15
l.losuj(gen)                            11
l.losuj(gen)                            19
l.losuj(gen)                            4
l.losuj(gen)                            10
l.losuj(gen)                            21
l.losuj(gen)                            2
l.losuj(gen)                            5