1#ifndef QX_FLATMULTISET_H
2#define QX_FLATMULTISET_H
14template<
typename T,
typename Compare = std::less<T>>
15 requires std::predicate<Compare, T, T>
18template<
typename T,
typename Predicate>
27template<
typename T,
typename Compare,
typename Predicate>
35 Iterator it = fms.
begin();
36 while(it != fms.
end())
56template<
typename T,
typename Compare>
57 requires std::predicate<Compare, T, T>
93 mContainer.
reserve(list.size());
94 for(
const auto& e : list)
98 template<std::input_iterator InputIterator>
112 for(
const auto& e : other)
121 qsizetype
size()
const {
return mContainer.
size(); }
164 if(mCompare(*mid, value))
166 else if(mCompare(value, *mid))
177 std::pair<const_iterator, const_iterator>
equal_range(
const T& value)
const
191 template<
typename ...Args>
194 T value(std::forward<Args>(args)...);
198 template<
typename ...Args>
201 T value(std::forward<Args>(args)...);
204 return mContainer.
insert(0, std::move(value));
207 bool nextAfter = pos ==
cend() || mCompare(value, *pos);
208 bool previousBeforeOrSame = pos ==
cbegin() || !mCompare(value, *std::prev(pos));
211 if(!nextAfter || !previousBeforeOrSame)
216 Q_ASSERT(nextAfter || previousBeforeOrSame);
217 pos = !nextAfter ? std::upper_bound(pos,
cend(), value, mCompare) : std::upper_bound(
cbegin(), pos, value, mCompare);
220 return mContainer.
insert(pos, std::move(value));
227 qsizetype removed = 0;
239 template<
typename Predicate>
241 qsizetype
removeIf(Predicate pred) {
return _QxPrivate::_erase_if(*
this, pred); }
291template<
typename T,
typename Compare,
typename Predicate>
The FlatMultiSet class is a container whose elements are always sorted.
Definition qx-flatmultiset.h:59
iterator rend() const
Definition qx-flatmultiset.h:145
typename Container::pointer pointer
Definition qx-flatmultiset.h:74
reverse_iterator rbegin() const
Definition qx-flatmultiset.h:142
bool contains(const T &value) const
Definition qx-flatmultiset.h:119
const_iterator ConstIterator
Definition qx-flatmultiset.h:67
bool empty() const
Definition qx-flatmultiset.h:122
qsizetype size() const
Definition qx-flatmultiset.h:121
const_iterator lowerBound(const T &value) const
Definition qx-flatmultiset.h:182
const_iterator constEnd() const
Definition qx-flatmultiset.h:141
iterator end() const
Definition qx-flatmultiset.h:139
const_iterator constFind(const T &value) const
Definition qx-flatmultiset.h:150
iterator erase(const_iterator pos)
Definition qx-flatmultiset.h:175
iterator emplace(const_iterator pos, Args &&... args)
Definition qx-flatmultiset.h:199
void clear()
Definition qx-flatmultiset.h:186
const_iterator iterator
Definition qx-flatmultiset.h:66
const_iterator find(const T &value) const
Definition qx-flatmultiset.h:148
bool contains(const FlatMultiSet &other) const
Definition qx-flatmultiset.h:110
typename Container::size_type size_type
Definition qx-flatmultiset.h:78
void swap(FlatMultiSet &other)
Definition qx-flatmultiset.h:245
const_reverse_iterator reverse_iterator
Definition qx-flatmultiset.h:76
qsizetype removeIf(Predicate pred)
Definition qx-flatmultiset.h:241
typename Container::const_iterator const_iterator
Definition qx-flatmultiset.h:65
const_reverse_iterator constReverseBegin() const
Definition qx-flatmultiset.h:144
typename Container::const_pointer const_pointer
Definition qx-flatmultiset.h:69
const T & constFirst() const
Definition qx-flatmultiset.h:126
FlatMultiSet(std::initializer_list< T > list)
Definition qx-flatmultiset.h:91
bool isEmpty() const
Definition qx-flatmultiset.h:123
const T & last() const
Definition qx-flatmultiset.h:127
bool operator==(const FlatMultiSet &other) const =default
void reserve(qsizetype size)
Definition qx-flatmultiset.h:132
FlatMultiSet(InputIterator first, InputIterator last)
Definition qx-flatmultiset.h:99
const_reverse_iterator ConstReverseIterator
Definition qx-flatmultiset.h:72
iterator Iterator
Definition qx-flatmultiset.h:68
typename Container::reference reference
Definition qx-flatmultiset.h:75
const_reverse_iterator crbegin() const
Definition qx-flatmultiset.h:143
const_iterator cend() const
Definition qx-flatmultiset.h:140
qsizetype remove(const T &value)
Definition qx-flatmultiset.h:225
typename Container::value_type key_type
Definition qx-flatmultiset.h:79
iterator insert(const_iterator pos, const T &value)
Definition qx-flatmultiset.h:188
qsizetype capacity() const
Definition qx-flatmultiset.h:131
iterator begin() const
Definition qx-flatmultiset.h:136
const_iterator upperBound(const T &value) const
Definition qx-flatmultiset.h:183
const T & constLast() const
Definition qx-flatmultiset.h:128
iterator emplace(Args &&... args)
Definition qx-flatmultiset.h:192
typename Container::difference_type difference_type
Definition qx-flatmultiset.h:73
void squeeze()
Definition qx-flatmultiset.h:133
typename Container::const_reference const_reference
Definition qx-flatmultiset.h:70
typename Container::value_type value_type
Definition qx-flatmultiset.h:80
const_iterator constBegin() const
Definition qx-flatmultiset.h:138
const_reverse_iterator constReverseEnd() const
Definition qx-flatmultiset.h:147
const_reverse_iterator crend() const
Definition qx-flatmultiset.h:146
QList< T > values() const
Definition qx-flatmultiset.h:249
const_iterator cbegin() const
Definition qx-flatmultiset.h:137
reverse_iterator ReverseIterator
Definition qx-flatmultiset.h:77
typename Container::const_reverse_iterator const_reverse_iterator
Definition qx-flatmultiset.h:71
iterator insert(const T &value)
Definition qx-flatmultiset.h:187
qsizetype count() const
Definition qx-flatmultiset.h:120
std::pair< const_iterator, const_iterator > equal_range(const T &value) const
Definition qx-flatmultiset.h:177
const T & first() const
Definition qx-flatmultiset.h:125
Specifies that a predicate is a valid predicate for a FlatMultiSet.
Definition qx-flatmultiset.h:19
The Qx namespace is the main namespace through which all non-global functionality of the Qx library i...
Definition qx-abstracterror.cpp:13
qsizetype erase_if(Bimap< Left, Right > &bimap, Predicate pred)
Definition qx-bimap.h:395
qsizetype capacity() const const
QList< T >::const_iterator cbegin() const const
QList< T >::const_iterator cend() const const
const T & constFirst() const const
const T & constLast() const const
typedef const_reverse_iterator
QList< T >::const_reverse_iterator crbegin() const const
QList< T >::const_reverse_iterator crend() const const
QList< T >::iterator erase(QList< T >::const_iterator begin, QList< T >::const_iterator end)
QList< T >::iterator insert(QList< T >::const_iterator before, QList< T >::parameter_type value)
bool isEmpty() const const
void reserve(qsizetype size)
qsizetype size() const const
void swap(QList< T > &other)