AutoPas  3.0.0
Loading...
Searching...
No Matches
NumberSetFinite.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <set>
10
11#include "ArrayUtils.h"
12#include "NumberSet.h"
13
14namespace autopas {
18template <class Number>
19class NumberSetFinite final : public NumberSet<Number> {
20 public:
24 NumberSetFinite() : _set() {}
29 NumberSetFinite(std::initializer_list<Number> values) : _set(values) {}
34 NumberSetFinite(const std::set<Number> &values) : _set(values) {}
35
36 std::unique_ptr<NumberSet<Number>> clone() const override { return std::make_unique<NumberSetFinite>(*this); }
41 inline void resetValues(const std::set<Number> &numbers) override { _set = numbers; }
42
43 std::string to_string() const override { return "" + utils::ArrayUtils::to_string(_set) + ""; }
44
45 inline bool isEmpty() const override { return _set.empty(); }
46 inline bool isFinite() const override { return true; }
47 inline bool isInterval() const override { return false; }
48 inline size_t size() const override { return _set.size(); }
49
50 inline Number getMin() const override { return *_set.begin(); }
51 inline Number getMax() const override { return *_set.rbegin(); }
52
53 inline std::set<Number> getAll() const override { return _set; }
54
55 inline Number getRandom(Random &rng) const override { return rng.pickRandom(_set); }
56 std::vector<Number> uniformSample(size_t n, Random &rng) const override {
57 return rng.uniformSample(_set.begin(), _set.end(), n);
58 }
59 std::set<Number> uniformSampleSet(size_t n, Random &rng) const override { return rng.randomSubset(_set, n); }
60 Number getMedian() const override {
61 auto it = std::begin(_set);
62 std::advance(it, _set.size() / 2);
63 return *it;
64 }
65
66 bool operator==(const NumberSet<Number> &rhs) const override {
67 return this->isInterval() == rhs.isInterval() and getAll() == rhs.getAll();
68 }
69
70 private:
74 std::set<Number> _set;
75};
76} // namespace autopas
Class describing a finite set of numbers.
Definition: NumberSetFinite.h:19
Number getMedian() const override
Get the median of the set.
Definition: NumberSetFinite.h:60
std::set< Number > uniformSampleSet(size_t n, Random &rng) const override
Sample up to n points from the set.
Definition: NumberSetFinite.h:59
bool operator==(const NumberSet< Number > &rhs) const override
Comparison operator.
Definition: NumberSetFinite.h:66
NumberSetFinite(std::initializer_list< Number > values)
Create a NumberSet of given values.
Definition: NumberSetFinite.h:29
Number getRandom(Random &rng) const override
Get a random number in the set.
Definition: NumberSetFinite.h:55
NumberSetFinite(const std::set< Number > &values)
Create a NumberSet from a std::set.
Definition: NumberSetFinite.h:34
std::vector< Number > uniformSample(size_t n, Random &rng) const override
Sample n points from the set.
Definition: NumberSetFinite.h:56
size_t size() const override
Get size of set.
Definition: NumberSetFinite.h:48
Number getMax() const override
Get the largest number in the set.
Definition: NumberSetFinite.h:51
std::string to_string() const override
Get a string representation of the set.
Definition: NumberSetFinite.h:43
bool isEmpty() const override
Indicates if the set is empty.
Definition: NumberSetFinite.h:45
Number getMin() const override
Get the smallest number in the set.
Definition: NumberSetFinite.h:50
bool isFinite() const override
Indicates if the set is finite.
Definition: NumberSetFinite.h:46
std::unique_ptr< NumberSet< Number > > clone() const override
Create a copy of a NumberSet.
Definition: NumberSetFinite.h:36
bool isInterval() const override
Function to distinguish between NumberSetFinite and NumberInterval.
Definition: NumberSetFinite.h:47
NumberSetFinite()
Default Constructor: Empty set.
Definition: NumberSetFinite.h:24
std::set< Number > getAll() const override
Get all numbers in the set.
Definition: NumberSetFinite.h:53
void resetValues(const std::set< Number > &numbers) override
Setter for NumberSetFinite.
Definition: NumberSetFinite.h:41
Virtual class describing a finite or infinite set of numbers.
Definition: NumberSet.h:22
virtual bool isInterval() const =0
Function to distinguish between NumberSetFinite and NumberInterval.
virtual std::set< Number > getAll() const =0
Get all numbers in the set.
Class for random algorithms.
Definition: Random.h:22
std::set< T > randomSubset(std::set< T > pool, size_t n)
Pick up to n random elements from the set.
Definition: Random.h:125
auto pickRandom(const Container &pool)
Get a uniformly randomly selected object from the given container.
Definition: Random.h:107
std::vector< typename std::iterator_traits< Iter >::value_type > uniformSample(Iter poolBegin, Iter poolEnd, size_t n)
Sample n points from the pool.
Definition: Random.h:53
void to_string(std::ostream &os, const Container &container, const std::string &delimiter, const std::array< std::string, 2 > &surround, Fun elemToString)
Generates a string representation of a container which fulfills the Container requirement (provide cb...
Definition: ArrayUtils.h:102
This is the main namespace of AutoPas.
Definition: AutoPasDecl.h:32