insert(P&& value) {
return insert(value_type(std::forward(value)));
}
template
void insert(InputIt first, InputIt last) {
for (; first != last; ++first) {
insert(*first);
}
}
void insert(std::initializer_list ilist) {
for (const auto& pair : ilist) {
insert(pair);
}
}
iterator erase(const_iterator pos) {
return iterator(data_.erase(pos.base()));
}
iterator erase(const_iterator first, const_iterator last) {
return iterator(data_.erase(first.base(), last.base()));
}
size_type erase(const Key& key) {
auto it = findInsertPos(key);
if (it != data_.end() && !comp_(key, it->first)) {
data_.erase(it);
return 1;
}
return 0;
}
void clear() {
data_.clear();
}
// Capacity
bool empty() const {
return data_.empty();
}
size_type size() const {
return data_.size();
}
size_type max_size() const {
return data_.max_size();
}
// Iterators
iterator begin() {
return iterator(data_.begin());
}
const_iterator begin() const {
return const_iterator(data_.begin());
}
const_iterator cbegin() const {
return const_iterator(data_.begin());
}
iterator end() {
return iterator(data_.end());
}
const_iterator end() const {
return const_iterator(data_.end());
}
const_iterator cend() const {
return const_iterator(data_.end());
}
reverse_iterator rbegin() {
return reverse_iterator(end());
}
const_reverse_iterator rbegin() const {
return const_reverse_iterator(end());
}
const_reverse_iterator crbegin() const {
return const_reverse_iterator(end());
}
reverse_iterator rend() {
return reverse_iterator(begin());
}
const_reverse_iterator rend() const {
return const_reverse_iterator(begin());
}
const_reverse_iterator crend() const {
return const_reverse_iterator(begin());
}
// Observers
key_compare key_comp() const {
return comp_;
}
};
} // namespace sta
// Specializations for structured bindings support
namespace std {
template
struct tuple_size>
: std::integral_constant {};
template
struct tuple_element> {
static_assert(I < 2, "Index out of bounds for pair");
using type = std::conditional_t;
};
template
struct tuple_element> {
static_assert(I < 2, "Index out of bounds for pair");
using type = std::conditional_t;
};
} // namespace std