6 #ifndef SWIFT_MISC_MAPBUILDER_H
7 #define SWIFT_MISC_MAPBUILDER_H
24 template <
typename K,
typename V>
29 template <
typename... Ts>
32 m_list.
push_back(std::make_pair(std::forward<Ts>(keyAndValue)...));
40 operator QMap<K, V>() const & {
return convertToMap(sortAndDeduplicate(m_list)); }
41 operator QMap<K, V>() && {
return convertToMap(sortAndDeduplicate(std::move(m_list))); }
42 operator QHash<K, V>() const & {
return convertTo<QHash>(sortAndDeduplicate(m_list)); }
43 operator QHash<K, V>() && {
return convertTo<QHash>(sortAndDeduplicate(std::move(m_list))); }
44 operator std::map<K, V>() const & {
return convertTo<std::map>(sortAndDeduplicate(m_list)); }
45 operator std::map<K, V>() && {
return convertTo<std::map>(sortAndDeduplicate(std::move(m_list))); }
53 std::sort(list.begin(), list.end(), [](
auto &&a,
auto &&b) { return std::less<>()(a.first, b.first); });
54 list.erase(std::unique(list.begin(), list.end(), [](
auto &&a,
auto &&b) { return a.first == b.first; }),
59 template <
template <
typename...>
class C>
60 static C<K, V> convertTo(
QList<std::pair<K, V>> &&list)
62 return C<K, V>(std::make_move_iterator(list.begin()), std::make_move_iterator(list.end()));
68 for (
auto &pair :
makeRange(list).reverse())
70 map.insert(map.cbegin(), std::move(pair.first), std::move(pair.second));
Build a QMap more efficiently when calling insert() in a for loop.
bool isEmpty() const
True if no pairs have been inserted.
void insert(Ts &&...keyAndValue)
Add an key/value pair to the map. Runs in amortized constant time.
Free functions in swift::misc.
auto makeRange(I begin, I2 end) -> CRange< I >
Returns a CRange constructed from begin and end iterators of deduced types.
bool isEmpty() const const
void push_back(QList< T >::parameter_type value)
QFuture< void > map(Iterator begin, Iterator end, MapFunctor &&function)