CellModules
unique_vector.hpp
Go to the documentation of this file.
1#ifndef UNIQUE_VECTOR_HPP
2#define UNIQUE_VECTOR_HPP
3#include <vector>
4template <typename T> class unique_vector {
5 // Vector class that ensures no duplicate
6
8
9 public:
10 const std::vector<T> &getUnderlyingVector() const { return vec; }
11 void clear() { vec = std::vector<T>(); }
12 T &operator[](size_t i) { return vec[i]; }
13 template <typename U> void insert(U &&u) {
14 if (!isInVector(std::forward<U>(u), vec)) vec.push_back(u);
15 }
16 template <typename I> void insert(I b, I e) {
17 while (b != e) {
18 insert(*b);
19 ++b;
20 }
21 }
22 size_t size() const { return vec.size(); }
23 size_t count(const T &t) const { return isInVector(t, vec) ? 1 : 0; }
24 void erase(const T &t) { eraseFromVector(t, vec); }
25 using const_iterator = typename decltype(vec)::const_iterator;
26 using iterator = typename decltype(vec)::iterator;
27 const_iterator begin() const { return vec.begin(); }
28 const_iterator end() const { return vec.end(); }
29 iterator begin() { return vec.begin(); }
30 iterator end() { return vec.end(); }
31};
32
33#endif
A simple vector class template.
Definition: std.hpp:290
typename decltype(vec)::iterator iterator
const_iterator begin() const
iterator end()
void erase(const T &t)
void insert(U &&u)
const std::vector< T > & getUnderlyingVector() const
std::vector< T > vec
size_t count(const T &t) const
typename decltype(vec)::const_iterator const_iterator
const_iterator end() const
size_t size() const
iterator begin()
T & operator[](size_t i)
void insert(I b, I e)
bool isInVector(const T &elem, const std::vector< T > &vec)
Definition: utils.hpp:62
void eraseFromVector(const T &elem, std::deque< T > &vec)
Definition: utils.hpp:65