add another sorted vector implementation
This commit is contained in:
parent
c32ad3de0a
commit
6f7d2af718
@ -11,7 +11,7 @@ template <typename T>
|
|||||||
class TinySet
|
class TinySet
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TinySet (void) {}
|
TinySet (void) { }
|
||||||
|
|
||||||
TinySet (const T& t)
|
TinySet (const T& t)
|
||||||
{
|
{
|
||||||
@ -196,5 +196,60 @@ class TinySet
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, typename Compare = std::less<T>>
|
||||||
|
class SortedVector
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SortedVector (const Compare& c = Compare()) : vec_(), cmp_(c) { }
|
||||||
|
|
||||||
|
template <class InputIterator>
|
||||||
|
SortedVector (InputIterator first, InputIterator last,
|
||||||
|
const Compare& c = Compare()) : vec_(first, last), cmp_(c)
|
||||||
|
{
|
||||||
|
std::sort (begin(), end(), cmp_);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef typename vector<T>::iterator iterator;
|
||||||
|
typedef typename vector<T>::const_iterator const_iterator;
|
||||||
|
iterator begin (void) { return vec_.begin(); }
|
||||||
|
iterator end (void) { return vec_.end(); }
|
||||||
|
const_iterator begin (void) const { return vec_.begin(); }
|
||||||
|
const_iterator end (void) const { return vec_.end(); }
|
||||||
|
|
||||||
|
iterator insert (const T& t)
|
||||||
|
{
|
||||||
|
iterator i = std::lower_bound (begin(), end(), t, cmp_);
|
||||||
|
if (i == end() || cmp_(t, *i))
|
||||||
|
vec_.insert(i, t);
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
const_iterator find (const T& t) const
|
||||||
|
{
|
||||||
|
const_iterator i = std::lower_bound (begin(), end(), t, cmp_);
|
||||||
|
return i == end() || cmp_(t, *i) ? end() : i;
|
||||||
|
}
|
||||||
|
|
||||||
|
iterator find (const T& t)
|
||||||
|
{
|
||||||
|
iterator i = std::lower_bound (begin(), end(), t, cmp_);
|
||||||
|
return i == end() || cmp_(t, *i) ? end() : i;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned size (void) const { return vec_.size(); }
|
||||||
|
|
||||||
|
bool empty (void) const { return vec_.empty(); }
|
||||||
|
|
||||||
|
void clear (void) { vec_.clear(); }
|
||||||
|
|
||||||
|
iterator erase (iterator it) { return vec_.erase (it); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<T> vec_;
|
||||||
|
Compare cmp_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif // HORUS_TINYSET_H
|
#endif // HORUS_TINYSET_H
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user