38#ifndef BLOCXX_SORTED_VECTOR_MAP_HPP_
39#define BLOCXX_SORTED_VECTOR_MAP_HPP_
40#include "blocxx/BLOCXX_config.h"
51template <
class Key,
class T,
class Compare>
54 typedef std::pair<Key, T>
Data;
58 return keyLess(lhs.first, rhs.first);
70 bool operator()(
const typename Data::first_type& k,
const typename Data::first_type& rhs)
const
75 bool keyLess(
const typename Data::first_type& k1,
76 const typename Data::first_type& k2)
const
78 return Compare()(k1, k2);
84template<
class Key,
class T,
class Compare>
85inline bool operator==(
const SortedVectorMap<Key, T, Compare>& x,
86 const SortedVectorMap<Key, T, Compare>& y);
88template<
class Key,
class T,
class Compare>
89inline bool operator<(
const SortedVectorMap<Key, T, Compare>& x,
90 const SortedVectorMap<Key, T, Compare>& y);
92template <
class Key,
class T,
class Compare>
93inline void swap(SortedVectorMap<Key, T, Compare>& x,
94 SortedVectorMap<Key, T, Compare>& y);
96template<
class Key,
class T,
class Compare>
99 typedef std::pair<Key, T>
Data;
108 typedef typename container_t::pointer
pointer;
123 template <
class InputIterator>
165 return m_impl->max_size();
185 return std::pair<iterator, bool>(i,
false);
189 return std::pair<iterator, bool>(
m_impl->insert(i, x),
true);
196 return m_impl->insert(i, x);
198 template <
class InputIterator>
199 void insert(InputIterator first, InputIterator last)
207 return m_impl->erase(position);
224 return m_impl->erase(first, last);
256 if (std::binary_search(
m_impl->begin(),
m_impl->end(), x, Compare()))
267 return std::lower_bound(
m_impl->begin(),
m_impl->end(), x, Compare());
271 return std::upper_bound(
m_impl->begin(),
m_impl->end(), x, Compare());
273 std::pair<const_iterator, const_iterator>
276 return std::equal_range(
m_impl->begin(),
m_impl->end(), x, Compare());
286 return (!Compare()(x, y) && !Compare()(y, x));
289template<
class Key,
class T,
class Compare>
295template<
class Key,
class T,
class Compare>
301template <
class Key,
class T,
class Compare>
COWReference A smart pointer that uses non-intrusive reference counting.
bool operator()(const Data &lhs, const typename Data::first_type &k) const
bool operator()(const Data &lhs, const Data &rhs) const
bool keyLess(const typename Data::first_type &k1, const typename Data::first_type &k2) const
bool operator()(const typename Data::first_type &k, const Data &rhs) const
bool operator()(const typename Data::first_type &k, const typename Data::first_type &rhs) const
const_iterator end() const
SortedVectorMap(InputIterator first, InputIterator last)
iterator insert(iterator, const value_type &x)
iterator erase(iterator first, iterator last)
const_iterator begin() const
std::pair< int, StringArray > Data
const_reverse_iterator rend() const
std::pair< iterator, bool > insert(const value_type &x)
data_type & operator[](const key_type &k)
container_t::const_reverse_iterator const_reverse_iterator
container_t::reference reference
std::pair< const_iterator, const_iterator > equal_range(const key_type &x) const
void swap(SortedVectorMap< Key, T, Compare > &x)
size_type max_size() const
size_type count(const key_type &x) const
const_iterator upper_bound(const key_type &x) const
std::vector< Data > container_t
const_iterator find(const key_type &x) const
static bool equivalent(const key_type &x, const key_type &y)
const_iterator lower_bound(const key_type &x) const
size_type erase(const key_type &x)
container_t::const_reference const_reference
container_t::reverse_iterator reverse_iterator
const_reverse_iterator rbegin() const
friend bool operator==(const SortedVectorMap< Key, T, Compare > &x, const SortedVectorMap< Key, T, Compare > &y)
void insert(InputIterator first, InputIterator last)
std::pair< const key_type, data_type > value_type
container_t::difference_type difference_type
SortedVectorMap(container_t *toWrap)
container_t::pointer pointer
iterator find(const key_type &x)
container_t::const_iterator const_iterator
container_t::size_type size_type
container_t::iterator iterator
iterator erase(iterator position)
COWReference< container_t > m_impl
bool operator<(const Array< T > &x, const Array< T > &y)
bool operator==(const Array< T > &x, const Array< T > &y)
void swap(Array< T > &x, Array< T > &y)