8#include <QtCore/qiterator.h> 
    9#include <QtCore/qlist.h> 
   10#include <QtCore/qrefcount.h> 
   11#include <QtCore/qpair.h> 
   12#include <QtCore/qshareddata.h> 
   13#include <QtCore/qshareddata_impl.h> 
   16#include <initializer_list> 
   23template <
typename AMap>
 
   28    using Key = 
typename Map::key_type;
 
   29    using T = 
typename Map::mapped_type;
 
   35    static_assert(std::is_nothrow_destructible_v<Key>, 
"Types with throwing destructors are not supported in Qt containers.");
 
   36    static_assert(std::is_nothrow_destructible_v<T>, 
"Types with throwing destructors are not supported in Qt containers.");
 
   56        const auto &keyCompare = 
source.key_comp();
 
   59            if (!keyCompare(
key, 
v.first) && !keyCompare(
v.first, 
key)) {
 
   68                            std::inserter(
m, 
m.end()),
 
   78        return [&
value](
const auto &
v) { 
return v.second == 
value; };
 
   83        auto i = std::find_if(
m.cbegin(),
 
   97        const auto extractKey = [](
const auto &
v) { 
return v.first; };
 
   99        std::transform(
m.cbegin(),
 
  101                       std::back_inserter(
result),
 
  111        for (
const auto &
v : 
m) {
 
  124        const auto extractValue = [](
const auto &
v) { 
return v.second; };
 
  126        std::transform(
m.cbegin(),
 
  128                       std::back_inserter(
result),
 
  152        const auto newDataEnd = 
result.it;
 
  155        const auto e = 
m.end();
 
  169            result.data->m.insert(newDataEnd, *
i);
 
  173        if (
result.it != newDataEnd)
 
  184template <
class Key, 
class T>
 
  187    using Map = std::map<Key, T>;
 
  208    QMap(std::initializer_list<std::pair<Key, T>> 
list)
 
  237                return std::move(
d->m);
 
  244    template <
typename AKey = Key, 
typename AT = T> 
friend 
  252        return rhs.d ? (lhs.d->m == rhs.d->m) : lhs.d->m.empty();
 
  255    template <
typename AKey = Key, 
typename AT = T> 
friend 
  258        return !(lhs == rhs);
 
  268    bool isEmpty()
 const { 
return d ? 
d->m.empty() : 
true; }
 
  280        return d ? !
d.isShared() : 
false; 
 
  315    template <
typename Predicate>
 
  331        auto i = 
d->m.find(
key);
 
  332        if (
i != 
d->m.end()) {
 
  333            T 
result(std::move(
i->second));
 
  344        auto i = 
d->m.find(
key);
 
  345        return i != 
d->m.end();
 
  353        return d->key(
value, defaultKey);
 
  360        const auto i = 
d->m.find(
key);
 
  361        if (
i != 
d->m.cend())
 
  370        auto i = 
d->m.find(
key);
 
  407        return d->count(
key);
 
  423    class const_iterator;
 
  430        typename Map::iterator 
i;
 
  471#if QT_DEPRECATED_SINCE(6, 0) 
  499        typename Map::const_iterator 
i;
 
  513        const T &
value()
 const { 
return i->second; }
 
  542#if QT_DEPRECATED_SINCE(6, 0) 
  629            return iterator(
d->m.erase(afirst.i, alast.i));
 
  631        auto result = 
d->erase(afirst.i, alast.i);
 
  698        typename Map::const_iterator dpos;
 
  700        if (!
d || 
d.isShared()) {
 
  701            auto posDistance = 
d ? std::distance(
d->m.cbegin(), 
pos.i) : 0;
 
  703            dpos = std::next(
d->m.cbegin(), posDistance);
 
  718#ifdef __cpp_lib_node_extract 
  720        copy.merge(std::move(
d->m));
 
  721        d->m = std::move(
copy);
 
  725        auto insertionHint = 
d->m.end();
 
  726        auto mapIt = 
map.d->m.crbegin();
 
  727        auto end = 
map.d->m.crend();
 
  728        for (; mapIt != 
end; ++mapIt)
 
  729            insertionHint = 
d->m.insert_or_assign(insertionHint, mapIt->first, mapIt->second);
 
  735        if (!
map.d || 
map.d->m.empty())
 
  738        if (
map.d.isShared()) {
 
  746#ifdef __cpp_lib_node_extract 
  747        map.d->m.merge(std::move(
d->m));
 
  748        *
this = std::move(
map);
 
  751        auto insertionHint = 
d->m.end();
 
  752        auto mapIt = 
map.d->m.crbegin();
 
  753        auto end = 
map.d->m.crend();
 
  754        for (; mapIt != 
end; ++mapIt)
 
  755            insertionHint = 
d->m.insert_or_assign(insertionHint, std::move(mapIt->first), std::move(mapIt->second));
 
  769        auto result = 
d->m.equal_range(akey);
 
  777        auto result = 
d->m.equal_range(akey);
 
  785template <
typename Key, 
typename T, 
typename Predicate>
 
  795template <
class Key, 
class T>
 
  798    using Map = std::multimap<Key, T>;
 
  828            d->m.insert(
other.d->m.begin(),
 
  838            if (
other.d.isShared()) {
 
  839                d->m.insert(
other.d->m.begin(),
 
  842#ifdef __cpp_lib_node_extract 
  843                d->m.merge(std::move(
other.d->m));
 
  845                d->m.insert(std::make_move_iterator(
other.d->m.begin()),
 
  846                            std::make_move_iterator(
other.d->m.end()));
 
  882                return std::move(
d->m);
 
  889    template <
typename AKey = Key, 
typename AT = T> 
friend 
  897        return rhs.d ? (lhs.d->m == rhs.d->m) : lhs.d->m.empty();
 
  900    template <
typename AKey = Key, 
typename AT = T> 
friend 
  903        return !(lhs == rhs);
 
  913    bool isEmpty()
 const { 
return d ? 
d->m.empty() : 
true; }
 
  925        return d ? !
d.isShared() : 
false; 
 
  969        const T valueCopy = 
value;
 
  975        const auto &keyCompare = 
d->m.key_comp();
 
  977        auto i = 
d->m.find(keyCopy);
 
  978        const auto e = 
d->m.end();
 
  980        while (
i != 
e && !keyCompare(keyCopy, 
i->first)) {
 
  981            if (
i->second == valueCopy) {
 
  992    template <
typename Predicate>
 
 1009        auto i = 
d->m.find(
key);
 
 1010        if (
i != 
d->m.end()) {
 
 1011            T 
result(std::move(
i->second));
 
 1022        auto i = 
d->m.find(
key);
 
 1023        return i != 
d->m.end();
 
 1036        return d->key(
value, defaultKey);
 
 1042            return defaultValue;
 
 1043        const auto i = 
d->m.find(
key);
 
 1044        if (
i != 
d->m.cend())
 
 1046        return defaultValue;
 
 1072                         std::back_inserter(
result));
 
 1098        return d->count(
key);
 
 1122    class const_iterator;
 
 1129        typename Map::iterator 
i;
 
 1170#if QT_DEPRECATED_SINCE(6, 0) 
 1198        typename Map::const_iterator 
i;
 
 1241#if QT_DEPRECATED_SINCE(6, 0) 
 1328            return iterator(
d->m.erase(afirst.i, alast.i));
 
 1330        auto result = 
d->erase(afirst.i, alast.i);
 
 1431        auto i = 
d->m.lower_bound(
key);
 
 1432        return iterator(
d->m.insert(
i, {key, value}));
 
 1438        typename Map::const_iterator dpos;
 
 1439        if (!
d || 
d.isShared()) {
 
 1440            auto posDistance = 
d ? std::distance(
d->m.cbegin(), 
pos.i) : 0;
 
 1442            dpos = std::next(
d->m.cbegin(), posDistance);
 
 1446        return iterator(
d->m.insert(dpos, {key, value}));
 
 1449#if QT_DEPRECATED_SINCE(6, 0) 
 1451    iterator insertMulti(const 
Key &
key, const T &
value)
 
 1456    iterator insertMulti(const_iterator 
pos, const 
Key &
key, const T &
value)
 
 1483        auto i = 
d->m.find(
key);
 
 1484        if (
i != 
d->m.end())
 
 1499        auto result = 
d->m.equal_range(akey);
 
 1507        auto result = 
d->m.equal_range(akey);
 
 1513        if (
other.isEmpty())
 
 1519#ifdef __cpp_lib_node_extract 
 1520        copy.merge(std::move(
d->m));
 
 1522        copy.insert(std::make_move_iterator(
d->m.begin()),
 
 1523                    std::make_move_iterator(
d->m.end()));
 
 1525        d->m = std::move(
copy);
 
 1534        if (
other.d.isShared()) {
 
 1542#ifdef __cpp_lib_node_extract 
 1543        other.d->m.merge(std::move(
d->m));
 
 1545        other.d->m.insert(std::make_move_iterator(
d->m.begin()),
 
 1546                          std::make_move_iterator(
d->m.end()));
 
 1548        *
this = std::move(
other);
 
 1556template <
typename Key, 
typename T>
 
 1564template <
typename Key, 
typename T>
 
 1567    return lhs.
unite(rhs);
 
 1570template <
typename Key, 
typename T, 
typename Predicate>
 
QPair< QString, QString > value_type
QList< T > values() const
typename Map::iterator iterator
EraseResult erase(const_iterator first, const_iterator last) const
Key key(const T &value, const Key &defaultKey) const
typename Map::size_type size_type
QList< Key > keys(const T &value) const
typename Map::mapped_type T
size_type count(const Key &key) const
typename Map::const_iterator const_iterator
typename Map::value_type value_type
size_type copyIfNotEquivalentTo(const Map &source, const Key &key)
static auto valueIsEqualTo(const T &value)
typename Map::key_type Key
QMapData(const Map &other)
QList< Key > keys() const
const_iterator operator++(int)
friend bool operator!=(const const_iterator &lhs, const const_iterator &rhs)
const_iterator & operator++()
friend bool operator==(const const_iterator &lhs, const const_iterator &rhs)
const T * operator->() const
Q_IMPLICIT const_iterator(const iterator &o)
const_iterator & operator--()
const_iterator operator--(int)
std::bidirectional_iterator_tag iterator_category
const T & operator*() const
friend bool operator==(const iterator &lhs, const iterator &rhs)
std::bidirectional_iterator_tag iterator_category
friend bool operator!=(const iterator &lhs, const iterator &rhs)
key_iterator(const_iterator o)
const_iterator::iterator_category iterator_category
key_iterator & operator--()
key_iterator & operator++()
const_iterator base() const
const Key * operator->() const
key_iterator operator--(int)
const Key & operator*() const
key_iterator operator++(int)
bool operator==(key_iterator o) const
const_iterator::difference_type difference_type
bool operator!=(key_iterator o) const
iterator insert(const Key &key, const T &value)
auto asKeyValueRange() &&
QPair< iterator, iterator > equal_range(const Key &akey)
T value(const Key &key, const T &defaultValue=T()) const
QList< Key > keys(const T &value) const
const_iterator end() const
iterator erase(const_iterator it)
key_value_iterator keyValueEnd()
bool contains(const Key &key) const
size_type count(const Key &key) const
iterator insert(const_iterator pos, const Key &key, const T &value)
std::map< Key, T > toStdMap() const &
const_iterator cend() const
QList< T > values() const
T & operator[](const Key &key)
QKeyValueIterator< const Key &, T &, iterator > key_value_iterator
size_type remove(const Key &key)
const_key_value_iterator constKeyValueEnd() const
const_iterator cbegin() const
const_iterator lowerBound(const Key &key) const
const_iterator constFind(const Key &key) const
QList< Key > keys() const
bool isSharedWith(const QMap< Key, T > &other) const noexcept
QPair< const_iterator, const_iterator > equal_range(const Key &akey) const
const_key_value_iterator constKeyValueBegin() const
iterator find(const Key &key)
void insert(const QMap< Key, T > &map)
iterator lowerBound(const Key &key)
const_iterator ConstIterator
const Key & firstKey() const
T operator[](const Key &key) const
const_key_value_iterator keyValueEnd() const
const Key & lastKey() const
QMap(std::map< Key, T > &&other)
iterator upperBound(const Key &key)
iterator erase(const_iterator afirst, const_iterator alast)
const_iterator constBegin() const
const_iterator begin() const
friend QTypeTraits::compare_eq_result_container< QMap, AKey, AT > operator!=(const QMap &lhs, const QMap &rhs)
size_type removeIf(Predicate pred)
key_iterator keyBegin() const
auto asKeyValueRange() const &&
const_key_value_iterator keyValueBegin() const
key_value_iterator keyValueBegin()
std::map< Key, T > toStdMap() &&
void insert(QMap< Key, T > &&map)
bool isDetached() const noexcept
QMap(const std::map< Key, T > &other)
QMap(std::initializer_list< std::pair< Key, T > > list)
Key key(const T &value, const Key &defaultKey=Key()) const
const_iterator constEnd() const
const_iterator upperBound(const Key &key) const
key_iterator keyEnd() const
QKeyValueIterator< const Key &, const T &, const_iterator > const_key_value_iterator
auto asKeyValueRange() const &
const_iterator find(const Key &key) const
void swap(QMap< Key, T > &other) noexcept
friend QTypeTraits::compare_eq_result_container< QMap, AKey, AT > operator==(const QMap &lhs, const QMap &rhs)
friend bool operator!=(const const_iterator &lhs, const const_iterator &rhs)
Q_IMPLICIT const_iterator(const iterator &o)
friend bool operator==(const const_iterator &lhs, const const_iterator &rhs)
const_iterator & operator--()
const T * operator->() const
const_iterator & operator++()
const_iterator operator--(int)
const T & operator*() const
const_iterator operator++(int)
std::bidirectional_iterator_tag iterator_category
friend bool operator==(const iterator &lhs, const iterator &rhs)
friend bool operator!=(const iterator &lhs, const iterator &rhs)
std::bidirectional_iterator_tag iterator_category
bool operator==(key_iterator o) const
const Key & operator*() const
const_iterator::difference_type difference_type
const_iterator base() const
key_iterator(const_iterator o)
key_iterator operator++(int)
const Key * operator->() const
const_iterator::iterator_category iterator_category
bool operator!=(key_iterator o) const
key_iterator & operator--()
key_iterator & operator++()
key_iterator operator--(int)
size_type count(const Key &key) const
QPair< iterator, iterator > equal_range(const Key &akey)
const_iterator find(const Key &key, const T &value) const
auto asKeyValueRange() const &&
QList< Key > keys(const T &value) const
iterator lowerBound(const Key &key)
size_type removeIf(Predicate pred)
iterator replace(const Key &key, const T &value)
friend QTypeTraits::compare_eq_result_container< QMultiMap, AKey, AT > operator!=(const QMultiMap &lhs, const QMultiMap &rhs)
const_key_value_iterator constKeyValueEnd() const
QMultiMap & unite(const QMultiMap &other)
QMultiMap(std::multimap< Key, T > &&other)
QPair< const_iterator, const_iterator > equal_range(const Key &akey) const
QList< Key > keys() const
QMultiMap(const QMap< Key, T > &other)
const_iterator constFind(const Key &key) const
const_key_value_iterator keyValueBegin() const
QMultiMap(QMap< Key, T > &&other)
friend QTypeTraits::compare_eq_result_container< QMultiMap, AKey, AT > operator==(const QMultiMap &lhs, const QMultiMap &rhs)
const_iterator constEnd() const
bool contains(const Key &key) const
std::multimap< Key, T > toStdMultiMap() const &
key_value_iterator keyValueEnd()
bool isSharedWith(const QMultiMap< Key, T > &other) const noexcept
std::multimap< Key, T > toStdMap() const
const_key_value_iterator constKeyValueBegin() const
const_iterator constFind(const Key &key, const T &value) const
key_iterator keyBegin() const
const Key & firstKey() const
std::multimap< Key, T > toStdMultiMap() &&
const_iterator find(const Key &key) const
QList< T > values(const Key &key) const
auto asKeyValueRange() const &
size_type count(const Key &key, const T &value) const
bool contains(const Key &key, const T &value) const
QKeyValueIterator< const Key &, const T &, const_iterator > const_key_value_iterator
QMultiMap(std::initializer_list< std::pair< Key, T > > list)
const_iterator end() const
const_iterator upperBound(const Key &key) const
QMultiMap(const std::multimap< Key, T > &other)
const_iterator ConstIterator
size_type remove(const Key &key, const T &value)
key_iterator keyEnd() const
iterator find(const Key &key)
iterator insert(const Key &key, const T &value)
iterator erase(const_iterator it)
const Key & lastKey() const
const_iterator begin() const
const_iterator constBegin() const
size_type remove(const Key &key)
const_iterator cbegin() const
iterator insert(const_iterator pos, const Key &key, const T &value)
T value(const Key &key, const T &defaultValue=T()) const
iterator upperBound(const Key &key)
void swap(QMultiMap< Key, T > &other) noexcept
QKeyValueIterator< const Key &, T &, iterator > key_value_iterator
iterator erase(const_iterator afirst, const_iterator alast)
key_value_iterator keyValueBegin()
iterator find(const Key &key, const T &value)
const_key_value_iterator keyValueEnd() const
bool isDetached() const noexcept
QList< Key > uniqueKeys() const
auto asKeyValueRange() &&
Key key(const T &value, const Key &defaultKey=Key()) const
const_iterator lowerBound(const Key &key) const
QList< T > values() const
const_iterator cend() const
QMap< QString, QString > map
[6]
QMultiMap< int, QWidget * > multimap
[28]
QSet< QString >::iterator it
Combined button and popup list for selecting options.
std::enable_if_t< std::conjunction_v< QTypeTraits::has_operator_equal_container< Container, T >... >, bool > compare_eq_result_container
auto associative_erase_if(Container &c, Predicate &pred)
static jboolean copy(JNIEnv *, jobject)
#define Q_DECL_DEPRECATED_X(text)
std::pair< T1, T2 > QPair
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define Q_DECLARE_ASSOCIATIVE_ITERATOR(C)
#define Q_DECLARE_MUTABLE_ASSOCIATIVE_ITERATOR(C)
QMultiMap< Key, T > operator+=(QMultiMap< Key, T > &lhs, const QMultiMap< Key, T > &rhs)
qsizetype erase_if(QMap< Key, T > &map, Predicate pred)
QMultiMap< Key, T > operator+(const QMultiMap< Key, T > &lhs, const QMultiMap< Key, T > &rhs)
GLsizei const GLfloat * v
[13]
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLsizei GLsizei GLchar * source
#define QT_DEPRECATED_VERSION_X_6_0(text)