mirror of
https://github.com/BlackMATov/flat.hpp.git
synced 2025-12-16 22:16:58 +07:00
add optional capacity control functions #3
This commit is contained in:
82
flat_set.hpp
82
flat_set.hpp
@@ -170,6 +170,18 @@ namespace flat_hpp
|
||||
return data_.max_size();
|
||||
}
|
||||
|
||||
size_type capacity() const noexcept {
|
||||
return data_.capacity();
|
||||
}
|
||||
|
||||
void reserve(size_type ncapacity) {
|
||||
data_.reserve(ncapacity);
|
||||
}
|
||||
|
||||
void shrink_to_fit() {
|
||||
data_.shrink_to_fit();
|
||||
}
|
||||
|
||||
std::pair<iterator, bool> insert(value_type&& value) {
|
||||
const iterator iter = lower_bound(value);
|
||||
return iter == end() || compare_(value, *iter)
|
||||
@@ -302,39 +314,81 @@ namespace flat_hpp
|
||||
|
||||
namespace flat_hpp
|
||||
{
|
||||
template < typename K, typename C, typename A >
|
||||
void swap(flat_set<K, C, A>& l, flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
void swap(
|
||||
flat_set<Key, Compare, Allocator, Container>& l,
|
||||
flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
l.swap(r);
|
||||
}
|
||||
|
||||
template < typename K, typename C, typename A >
|
||||
bool operator==(const flat_set<K, C, A>& l, const flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
bool operator==(
|
||||
const flat_set<Key, Compare, Allocator, Container>& l,
|
||||
const flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
return l.size() == r.size()
|
||||
&& std::equal(l.begin(), l.end(), r.begin(), r.end());
|
||||
}
|
||||
|
||||
template < typename K, typename C, typename A >
|
||||
bool operator!=(const flat_set<K, C, A>& l, const flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
bool operator!=(
|
||||
const flat_set<Key, Compare, Allocator, Container>& l,
|
||||
const flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
return !(l == r);
|
||||
}
|
||||
|
||||
template < typename K, typename C, typename A >
|
||||
bool operator<(const flat_set<K, C, A>& l, const flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
bool operator<(
|
||||
const flat_set<Key, Compare, Allocator, Container>& l,
|
||||
const flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
|
||||
}
|
||||
|
||||
template < typename K, typename C, typename A >
|
||||
bool operator>(const flat_set<K, C, A>& l, const flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
bool operator>(
|
||||
const flat_set<Key, Compare, Allocator, Container>& l,
|
||||
const flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
return r < l;
|
||||
}
|
||||
|
||||
template < typename K, typename C, typename A >
|
||||
bool operator<=(const flat_set<K, C, A>& l, const flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
bool operator<=(
|
||||
const flat_set<Key, Compare, Allocator, Container>& l,
|
||||
const flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
return !(r < l);
|
||||
}
|
||||
|
||||
template < typename K, typename C, typename A >
|
||||
bool operator>=(const flat_set<K, C, A>& l, const flat_set<K, C, A>& r) {
|
||||
template < typename Key
|
||||
, typename Compare
|
||||
, typename Allocator
|
||||
, typename Container >
|
||||
bool operator>=(
|
||||
const flat_set<Key, Compare, Allocator, Container>& l,
|
||||
const flat_set<Key, Compare, Allocator, Container>& r)
|
||||
{
|
||||
return !(l < r);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user