本页内容

QMap Class

template <typename Key, typename T> class QMap

QMap 类是一个提供关联数组的模板类。更多内容...

头文件: #include <QMap>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入函数。

QMap 比较

类别可比较类型
相等性QMap

公共类型

公共函数

QMap()
QMap(const std::map<Key, T> &other)
QMap(std::initializer_list<std::pair<Key, T>> list)
QMap(std::map<Key, T> &&other)
QMap(const QMap<Key, T> &other)
QMap(QMap<Key, T> &&other)
~QMap()
(since 6.4) auto asKeyValueRange() &&
(since 6.4) auto asKeyValueRange() &
(since 6.4) auto asKeyValueRange() const &&
(since 6.4) auto asKeyValueRange() const &
QMap<Key, T>::iterator begin()
QMap<Key, T>::const_iterator begin() const
QMap<Key, T>::const_iterator cbegin() const
QMap<Key, T>::const_iterator cend() const
void clear()
QMap<Key, T>::const_iterator constBegin() const
QMap<Key, T>::const_iterator constEnd() const
QMap<Key, T>::const_iterator constFind(const Key &key) const
QMap<Key, T>::const_key_value_iterator constKeyValueBegin() const
QMap<Key, T>::const_key_value_iterator constKeyValueEnd() const
bool contains(const Key &key) const
QMap<Key, T>::size_type count(const Key &key) const
QMap<Key, T>::size_type count() const
bool empty() const
QMap<Key, T>::iterator end()
QMap<Key, T>::const_iterator end() const
std::pair<QMap<Key, T>::iterator, QMap<Key, T>::iterator> equal_range(const Key &key)
std::pair<QMap<Key, T>::const_iterator, QMap<Key, T>::const_iterator> equal_range(const Key &key) const
QMap<Key, T>::iterator erase(QMap<Key, T>::const_iterator pos)
(since 6.0) QMap<Key, T>::iterator erase(QMap<Key, T>::const_iterator first, QMap<Key, T>::const_iterator last)
QMap<Key, T>::iterator find(const Key &key)
QMap<Key, T>::const_iterator find(const Key &key) const
T &first()
const T &first() const
const Key &firstKey() const
void insert(QMap<Key, T> &&map)
void insert(const QMap<Key, T> &map)
QMap<Key, T>::iterator insert(const Key &key, const T &value)
QMap<Key, T>::iterator insert(QMap<Key, T>::const_iterator pos, const Key &key, const T &value)
bool isEmpty() const
Key key(const T &value, const Key &defaultKey = Key()) const
QMap<Key, T>::key_iterator keyBegin() const
QMap<Key, T>::key_iterator keyEnd() const
QMap<Key, T>::key_value_iterator keyValueBegin()
QMap<Key, T>::const_key_value_iterator keyValueBegin() const
QMap<Key, T>::key_value_iterator keyValueEnd()
QMap<Key, T>::const_key_value_iterator keyValueEnd() const
QList<Key> keys() const
QList<Key> keys(const T &value) const
T &last()
const T &last() const
const Key &lastKey() const
QMap<Key, T>::iterator lowerBound(const Key &key)
QMap<Key, T>::const_iterator lowerBound(const Key &key) const
QMap<Key, T>::size_type remove(const Key &key)
(since 6.1) QMap<Key, T>::size_type removeIf(Predicate pred)
QMap<Key, T>::size_type size() const
void swap(QMap<Key, T> &other)
T take(const Key &key)
std::map<Key, T> toStdMap() const &
(since 6.0) std::map<Key, T> toStdMap() &&
QMap<Key, T>::iterator upperBound(const Key &key)
QMap<Key, T>::const_iterator upperBound(const Key &key) const
T value(const Key &key, const T &defaultValue = T()) const
QList<T> values() const
QMap<Key, T> &operator=(QMap<Key, T> &&other)
QMap<Key, T> &operator=(const QMap<Key, T> &other)
T &operator[](const Key &key)
T operator[](const Key &key) const
(since 6.1) qsizetype erase_if(QMap<Key, T> &map, Predicate pred)
(since 6.8) size_t qHash(const QMap<Key, T> &key, size_t seed = 0)
bool operator!=(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
(since 6.12) bool operator<(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMap<Key, T> &map)
(since 6.12) bool operator<=(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
(since 6.12) auto operator<=>(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
bool operator==(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
(since 6.12) bool operator>(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
(since 6.12) bool operator>=(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QMap<Key, T> &map)

详细说明

QMap<KEY, T> 是 Qt 的泛型容器类之一,其中Key 是用于查找的键类型,T 是映射值的类型。它存储 (键, 值) 对,并支持通过键进行快速查找。

QMap 和QHash 提供的功能非常相似。它们的区别在于:

  • QHash 其查找速度平均快于 QMap。(详情请参阅“算法复杂度”。)
  • 遍历QHash 时,项的顺序是随机的。而 QMap 中的项始终按键值排序。
  • QHash 的键类型必须提供 operator==() 运算符和全局qHash(Key) 函数。QMap 的键类型必须提供指定全序的 operator<() 运算符。自 Qt 5.8.1 起,即使底层 operator<() 未提供全序,使用指针类型作为键也是安全的。

以下是一个使用QString 作为键、int 作为值的 QMap 示例:

QMap<QString, int> map;

要将 (键, 值) 对插入到映射中,可以使用 operator[]():

map["one"] = 1;
map["three"] = 3;
map["seven"] = 7;

这将以下三个 (key, value) 对插入到 QMap 中:("one", 1)、("three", 3) 和 ("seven", 7)。向映射中插入项的另一种方法是使用insert():

map.insert("twelve", 12);

要查询值,请使用 operator[]() 或value():

int num1 = map["thirteen"];
int num2 = map.value("thirteen");

如果映射中不存在指定键的项,这些函数将返回一个默认构造的值。

若要检查映射中是否包含某个键,请使用contains():

int timeout = 30;
if (map.contains("TIMEOUT"))
    timeout = map.value("TIMEOUT");

此外,value() 还有一个重载版本,当不存在指定键的项时,会将其第二个参数用作默认值:

int timeout = map.value("TIMEOUT", 30);

通常,我们建议您使用 `contains()` 和 `value()` 而不是 `operator[]()` 来在映射中查找键。 原因是,如果地图中不存在具有相同键的项,`operator[]()` 会悄无声息地将该项插入到地图中(除非该地图是 const 类型)。例如,以下代码片段将在内存中创建 1000 个项:

// WRONG
QMap<int, QWidget *> map;
//...
for (int i = 0; i < 1000; ++i) {
    if (map[i] == okButton)
        cout << "Found button at index " << i << endl;
}

为避免此问题,请将上文中的map[i] 替换为map.value(i) 。

若要遍历 QMap 中存储的所有 (键, 值) 对,可以使用迭代器。QMap 同时提供了Java 风格的迭代器(QMapIterator 和QMutableMapIterator )以及STL 风格的迭代器(QMap::const_iterator 和QMap::iterator )。 以下是使用 Java 风格迭代器遍历 QMap<QString, int> 的方法:

QMapIterator<QString, int> i(map);
while (i.hasNext()) {
    i.next();
    cout << qPrintable(i.key()) << ": " << i.value() << endl;
}

以下是相同的代码,但这次使用了 STL 风格的迭代器:

for (auto i = map.cbegin(), end = map.cend(); i != end; ++i)
    cout << qPrintable(i.key()) << ": " << i.value() << endl;

项目按键值升序遍历。

QMap 允许每个键仅有一个值。如果调用insert() 时传入的键在 QMap 中已存在,则之前的值将被清除。例如:

map.insert("plenty", 100);
map.insert("plenty", 2000);
// map.value("plenty") == 2000

不过,你可以通过使用 `QMultiMap` 来为每个键存储多个值。

如果你只需要从映射中提取值(而非键),也可以使用基于范围的 for 循环:

QMap<QString, int> map;
//...
for (int value : std::as_const(map))
    cout << value << endl;

可以通过多种方式从映射中删除项。一种方法是调用 `remove()`;这将删除所有具有给定键的项。另一种方法是使用 `QMutableMapIterator::remove()`。此外,还可以使用 `clear()` 清空整个映射。

QMap 的键和值必须是可赋值的数据类型。 这涵盖了您可能遇到的绝大多数数据类型,但编译器不会允许您将QWidget 作为值存储;相反,应存储QWidget *。此外,QMap的键类型必须提供operator<()。QMap使用该运算符来保持其项的排序,并假设当x < y 和y < x 均不成立时,两个键x 和y 是等价的。

示例:

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

class Employee
{
public:
    Employee() {}
    Employee(const QString &name, QDate dateOfBirth);
    QString name() const { return myName; }
    QDate dateOfBirth() const { return myDateOfBirth; }
    //...

private:
    QString myName;
    QDate myDateOfBirth;
};

inline bool operator<(const Employee &e1, const Employee &e2)
{
    if (e1.name() != e2.name())
        return e1.name() < e2.name();
    return e1.dateOfBirth() < e2.dateOfBirth();
}

#endif // EMPLOYEE_H

在此示例中,我们首先比较员工的姓名。如果姓名相等,则比较他们的出生日期以确定排名。

另请参阅 QMapIterator 、QMutableMapIterator 、QHash 以及QSet 。

成员类型文档

QMap::ConstIterator

QMap::const_iterator 的 Qt 风格同义词。

QMap::Iterator

QMap::iterator 的 Qt 风格同义词。

QMap::const_key_value_iterator

typedef QMap::const_key_value_iterator 为QMap 提供了一个 STL 风格的迭代器。

QMap::const_key_value_iterator 与QMap::const_iterator 本质上相同,区别在于 operator*() 返回键/值对而非单个值。

另请参见 QKeyValueIterator 。

[alias] QMap::difference_type

ptrdiff_t 的 typedef。为兼容 STL 而提供。

[alias] QMap::key_type

Key 的 typedef。为兼容 STL 而提供。

QMap::key_value_iterator

QMap::key_value_iterator 类型别名提供了适用于 `QMap` 的 STL 风格迭代器。

QMap::key_value_iterator 与QMap::iterator 本质上相同,区别在于其 operator*() 返回键值对而非单个值。

另请参阅 QKeyValueIterator 。

[alias] QMap::mapped_type

T 的 typedef 定义。为确保与 STL 兼容而提供。

[alias] QMap::size_type

int 的 typedef。为兼容 STL 而提供。

成员函数文档

[default] QMap::QMap()

构建一个空映射。

另请参阅 clear()。

[explicit] QMap::QMap(const std::map<Key, T> &other)

创建other 的副本。

另请参阅 toStdMap()。

QMap::QMap(std::initializer_list<std::pair<Key, T>> list)

构建一个映射,其中包含初始化列表list 中每个元素的副本。

[explicit] QMap::QMap(std::map<Key, T> &&other)

通过从other 开始构建一个地图。

另请参阅 toStdMap()。

[implicit] QMap::QMap(const QMap<Key, T> &other)

构建other 的副本。

由于 QMap 是隐式共享的,因此该操作的时间复杂度为常数。这使得从函数中返回一个 QMap 非常快速。如果共享的实例被修改,则会进行复制(写时复制),此过程的时间复杂度为线性。

另请参阅 operator= 。

[implicit] QMap::QMap(QMap<Key, T> &&other)

通过 move 构造一个 QMap 实例。

[implicit] QMap::~QMap()

销毁该映射。对该映射中值的引用以及所有遍历该映射的迭代器都将失效。

[since 6.4] auto QMap::asKeyValueRange() &&

[since 6.4] auto QMap::asKeyValueRange() &

[since 6.4] auto QMap::asKeyValueRange() const &&

[since 6.4] auto QMap::asKeyValueRange() const &

返回一个范围对象,允许以键值对的形式遍历此映射。例如,该范围对象可与结构化绑定声明结合,用于基于范围的 for 循环中:

QMap<QString, int> map;
map.insert("January", 1);
map.insert("February", 2);
// ...
map.insert("December", 12);

for (auto [key, value] : map.asKeyValueRange()) {
    cout << qPrintable(key) << ": " << value << endl;
    --value; // convert to JS month indexing
}

请注意,通过此方式获取的键和值都是对映射中相应项的引用。具体来说,修改值将会直接修改映射本身。

这些函数在 Qt 6.4 中引入。

另请参阅 QKeyValueIterator 。

QMap<Key, T>::iterator QMap::begin()

返回一个指向地图中第一个项的STL 风格迭代器。

另请参阅 constBegin() 和end()。

QMap<Key, T>::const_iterator QMap::begin() const

这是一个重载函数。

QMap<Key, T>::const_iterator QMap::cbegin() const

返回一个指向映射中第一个元素的常量STL 风格迭代器。

另请参阅 begin() 和cend()。

QMap<Key, T>::const_iterator QMap::cend() const

返回一个指向映射中最后一个元素之后的虚拟元素的常量STL 风格迭代器。

另请参阅 cbegin() 和end()。

void QMap::clear()

从地图上移除所有项目。

另请参阅 remove()。

QMap<Key, T>::const_iterator QMap::constBegin() const

返回一个指向 map 中第一个元素的 constSTL 风格迭代器。

另请参阅 begin() 和constEnd()。

QMap<Key, T>::const_iterator QMap::constEnd() const

返回一个指向地图中最后一个元素之后的虚拟元素的常量STL 风格迭代器。

另请参见 constBegin() 和end()。

QMap<Key, T>::const_iterator QMap::constFind(const Key &key) const

返回一个指向映射中键为key 的项的const迭代器。

如果映射中不存在键为 `key` 的项,则该函数返回 `constEnd()`。

另请参阅 ` find()`。

QMap<Key, T>::const_key_value_iterator QMap::constKeyValueBegin() const

返回一个指向地图中第一个条目的常量STL 风格迭代器。

另请参阅 keyValueBegin()。

QMap<Key, T>::const_key_value_iterator QMap::constKeyValueEnd() const

返回一个指向映射中最后一个条目之后的虚拟条目的、STL 风格的const迭代器。

另请参阅 constKeyValueBegin()。

bool QMap::contains(const Key &key) const

如果映射中包含键为key 的项,则返回true ;否则返回false 。

另请参阅 count()。

QMap<Key, T>::size_type QMap::count(const Key &key) const

返回与键key 关联的项目数量。

另请参阅 contains()。

QMap<Key, T>::size_type QMap::count() const

与size()相同。

这是一个重载函数。

bool QMap::empty() const

提供此函数是为了兼容 STL。它等同于 `isEmpty()`,如果映射为空,则返回 true;否则返回 false。

QMap<Key, T>::iterator QMap::end()

返回一个STL 风格的迭代器,该迭代器指向映射中最后一个元素之后的一个虚拟元素。

另请参阅 begin() 和constEnd()。

QMap<Key, T>::const_iterator QMap::end() const

这是一个重载函数。

std::pair<QMap<Key, T>::iterator, QMap<Key, T>::iterator> QMap::equal_range(const Key &key)

返回一对迭代器,它们界定了值[first, second) 的范围,这些值存储在key 中。

std::pair<QMap<Key, T>::const_iterator, QMap<Key, T>::const_iterator> QMap::equal_range(const Key &key) const

这是一个重载函数。

QMap<Key, T>::iterator QMap::erase(QMap<Key, T>::const_iterator pos)

从映射中移除由迭代器pos 指向的 (键, 值) 对,并返回指向映射中下一个元素的迭代器。

注意: 迭代器pos 必须有效且可解引用。

另请参阅 remove()。

[since 6.0] QMap<Key, T>::iterator QMap::erase(QMap<Key, T>::const_iterator first, QMap<Key, T>::const_iterator last)

从映射中移除由迭代器范围 [first,last) 所指向的 (键, 值) 对。返回一个迭代器,该迭代器指向映射中紧跟在最后一个被移除元素之后的项。

注意: 范围[first, last) 必须是 *this 中的有效范围。

该函数在 Qt 6.0 中引入。

另请参阅 remove()。

QMap<Key, T>::iterator QMap::find(const Key &key)

返回一个迭代器,该迭代器指向映射中键为key 的项。

如果映射中不存在键为 `key` 的项,则该函数返回 `end()`。

另请参阅 constFind()、value()、values()、lowerBound() 以及upperBound()。

QMap<Key, T>::const_iterator QMap::find(const Key &key) const

这是一个重载函数。

T &QMap::first()

返回映射中第一个值的引用,即与最小键关联的值。该函数假设映射不为空。

当未共享(或调用 const 版本)时,该函数的执行时间为常数时间。

另请参阅 last()、firstKey() 和isEmpty()。

const T &QMap::first() const

这是一个重载函数。

const Key &QMap::firstKey() const

返回映射中最小键的引用。该函数假设映射不为空。

该函数的执行时间为常数时间。

另请参阅 lastKey()、first()、keyBegin() 以及isEmpty()。

void QMap::insert(QMap<Key, T> &&map)

将map 中的所有项移入此映射。

如果两个映射中存在相同的键,则该键的值将被替换为map 中存储的值。

如果map 是共享的,则会复制这些项。

void QMap::insert(const QMap<Key, T> &map)

将map 中的所有项插入到此映射中。

如果两个映射中存在相同的键,则该键的值将被替换为map 中存储的值。

QMap<Key, T>::iterator QMap::insert(const Key &key, const T &value)

插入一个新条目,其键为key ,值为value 。

如果已经存在键为key 的项,则该项的值将被替换为value 。

如果插入的键值对的键与现有键相同,则会替换原有值。

返回一个指向新元素或更新后元素的迭代器。

QMap<Key, T>::iterator QMap::insert(QMap<Key, T>::const_iterator pos, const Key &key, const T &value)

插入一个新项,其键为key ,值为value ,并带有提示pos ,用于指定插入位置。

如果使用constBegin() 作为提示,则表示key 小于映射中的任何键;而constEnd() 则表示key 严格大于映射中的任何键。 否则,提示应满足条件 (pos - 1)。key() <key <= pos.key()。如果提示pos 错误,则会被忽略,并执行常规插入操作。

如果已经存在键为key 的项,则该项的值将被替换为value 。

如果提示正确且映射未被共享,则插入操作将在摊还常数时间内执行。

当从已排序的数据创建映射时,使用 `constBegin()` 先插入最大的键,比使用 `constEnd()` 按排序顺序插入更快,因为 `constEnd()` - 1(用于检查提示是否有效)需要对数时间。

注意:使用提示时需谨慎。提供来自旧共享实例的迭代器可能会导致程序崩溃,但也存在悄无声息地同时破坏原映射和pos 映射的风险。

返回一个指向新元素或更新后元素的迭代器。

这是一个重载函数。

bool QMap::isEmpty() const

如果映射中不包含任何项目,则返回true ;否则返回false。

另请参阅 size()。

Key QMap::key(const T &value, const Key &defaultKey = Key()) const

返回第一个值为value 的键;如果映射中不存在值为value 的项,则返回defaultKey 。如果未提供defaultKey ,该函数将返回一个通过默认构造创建的键。

此函数可能运行较慢(线性时间),因为QMap 的内部数据结构是为按键快速查找而优化的,而非按值查找。

另请参阅 value() 和keys()。

QMap<Key, T>::key_iterator QMap::keyBegin() const

返回一个指向映射中第一个键的常量STL 风格迭代器。

另请参阅 keyEnd() 和firstKey()。

QMap<Key, T>::key_iterator QMap::keyEnd() const

返回一个指向映射中最后一个键之后的虚拟项的 constSTL 风格迭代器。

另请参阅 keyBegin() 和lastKey()。

QMap<Key, T>::key_value_iterator QMap::keyValueBegin()

返回一个指向映射中第一个条目的STL 风格迭代器。

另请参阅 keyValueEnd()。

QMap<Key, T>::const_key_value_iterator QMap::keyValueBegin() const

返回一个指向映射中第一个条目的常量STL 风格迭代器。

另请参见 ` keyValueEnd()`。

QMap<Key, T>::key_value_iterator QMap::keyValueEnd()

返回一个STL 风格的迭代器,该迭代器指向映射中最后一个条目之后的虚拟条目。

另请参阅 keyValueBegin()。

QMap<Key, T>::const_key_value_iterator QMap::keyValueEnd() const

返回一个指向映射中最后一个条目之后虚构条目的常量STL 风格迭代器。

另请参阅 keyValueBegin()。

QList<Key> QMap::keys() const

返回一个列表,其中包含地图中所有键,按升序排列。

该顺序保证与values() 所使用的顺序一致。

该函数会创建一个新列表,时间复杂度为线性。若从 `keyBegin()` 迭代至 `keyEnd()`,则可避免由此产生的时间和内存开销。

另请参阅 values() 和key()。

QList<Key> QMap::keys(const T &value) const

返回一个列表,其中包含与值value 关联的所有键,按升序排列。

该函数可能运行较慢(线性时间),因为QMap 的内部数据结构是为按键快速查找而优化的,而非按值查找。

这是一个重载函数。

T &QMap::last()

返回映射中最后一个值的引用,即与最大键关联的值。该函数假设映射不为空。

当未共享(或调用 const 版本)时,该函数的执行时间为常数时间。

另请参阅 first()、lastKey() 和isEmpty()。

const T &QMap::last() const

这是一个重载函数。

const Key &QMap::lastKey() const

返回映射中最大键的引用。该函数假设映射不为空。

该函数的执行时间为常数时间。

另请参阅 firstKey()、last()、keyEnd() 以及isEmpty()。

QMap<Key, T>::iterator QMap::lowerBound(const Key &key)

返回一个迭代器,该迭代器指向映射中键为key 的第一个项。如果映射中不存在键为key 的项,则该函数返回一个迭代器,该迭代器指向键值大于 的最近项。

另请参阅 upperBound() 和find()。

QMap<Key, T>::const_iterator QMap::lowerBound(const Key &key) const

这是一个重载函数。

QMap<Key, T>::size_type QMap::remove(const Key &key)

从映射中移除所有具有键key 的项。返回移除的项的数量;如果该键在映射中存在,则返回 1;否则返回 0。

另请参阅 clear() 和take()。

[since 6.1] template <typename Predicate> QMap<Key, T>::size_type QMap::removeIf(Predicate pred)

从映射中移除所有满足谓词pred 返回 true 的元素。

该函数支持接受QMap<Key, T>::iterator 类型参数或std::pair<const Key &, T &> 类型参数的谓词。

返回被移除的元素个数(如有)。

该函数在 Qt 6.1 中引入。

另请参见 clear() 和take()。

QMap<Key, T>::size_type QMap::size() const

返回映射中(键,值)对的数量。

另请参阅 isEmpty() 和count()。

[noexcept] void QMap::swap(QMap<Key, T> &other)

将此地图与other 互换。该操作非常快速,且绝不会失败。

T QMap::take(const Key &key)

从映射中移除键为key 的项,并返回与其关联的值。

如果该项在映射中不存在,则该函数仅返回一个通过默认构造创建的值。

如果您不使用返回值,remove() 的效率更高。

另请参阅 remove()。

std::map<Key, T> QMap::toStdMap() const &

返回一个与该QMap 等效的 STL 映射。

[since 6.0] std::map<Key, T> QMap::toStdMap() &&

注意:调用 此函数将使该QMap 保持在部分构型状态,在此状态下,唯一有效的操作是销毁或赋予新值。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

QMap<Key, T>::iterator QMap::upperBound(const Key &key)

返回一个迭代器,该迭代器指向映射中键为key 的最后一个项之后的紧邻项。如果映射中不存在键为key 的项,则该函数返回一个指向键值更大且距离该项最近的项的迭代器。

示例:

QMap<int, QString> map;
map.insert(1, "one");
map.insert(5, "five");
map.insert(10, "ten");

map.upperBound(0);      // returns iterator to (1, "one")
map.upperBound(1);      // returns iterator to (5, "five")
map.upperBound(2);      // returns iterator to (5, "five")
map.upperBound(10);     // returns end()
map.upperBound(999);    // returns end()

另请参阅 lowerBound() 和find()。

QMap<Key, T>::const_iterator QMap::upperBound(const Key &key) const

这是一个重载函数。

T QMap::value(const Key &key, const T &defaultValue = T()) const

返回与键key 关联的值。

如果映射中不存在键为key 的项,则该函数返回defaultValue 。如果未指定defaultValue ,则该函数返回一个默认构造的值。

另请参阅 key()、values()、contains() 和operator[]()。

QList<T> QMap::values() const

返回一个包含地图中所有值的列表,按键值升序排列。

该函数会创建一个新的列表,时间复杂度为线性。可以通过从keyValueBegin() 迭代到keyValueEnd() 来避免由此产生的时间和内存消耗。

另请参阅 keys() 和value()。

[implicit] QMap<Key, T> &QMap::operator=(QMap<Key, T> &&other)

将other 通过Move-assigns操作赋值给此QMap 实例。

[implicit] QMap<Key, T> &QMap::operator=(const QMap<Key, T> &other)

将other 赋值给此映射,并返回对此映射的引用。

T &QMap::operator[](const Key &key)

返回与键key 关联的值,该值以可修改引用形式返回。

如果映射中不存在键为key 的项,则该函数会将一个默认构造的值插入映射中,键为key ,并返回该值的引用。

另请参阅 insert() 和value()。

T QMap::operator[](const Key &key) const

与value()相同。

这是一个重载函数。

相关的非成员函数

[since 6.1] template < typename Key, typename T, typename Predicate > qsizetype erase_if(QMap<Key, T> &map, Predicate pred)

从映射map 中移除所有满足谓词pred 的元素。

该函数支持接受QMap<Key, T>::iterator 类型参数或std::pair<const Key &, T &> 类型参数的谓词。

返回被移除的元素个数(如有)。

该函数首次引入于 Qt 6.1。

[since 6.8] size_t qHash(const QMap<Key, T> &key, size_t seed = 0)

返回key 的哈希值,并使用seed 作为计算的种子。

qHash() 必须支持Key 和T 这两种类型。

该函数在 Qt 6.8 中引入。

bool operator!=(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

如果 `lhs ` 不等于 `rhs`,则返回 `true `;否则返回 `false`。

如果两个映射包含相同的 (键, 值) 对,则认为它们相等。

此函数要求键和值的类型都实现了operator==() 接口。

另请参阅 operator==()。

[since 6.12] bool operator<(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

如果lhs 的字典序小于 rhs ,则返回true ;否则返回false 。

如果键类型Key 和映射类型T 均提供了operator<=>() (在 C++20 模式下)、compareThreeWay() 辅助方法或operator<() 中的任意一种,则该运算符可用。

该函数在 Qt 6.12 中引入。

template <typename Key, typename T> QDataStream &operator<<(QDataStream &out, const QMap<Key, T> &map)

将映射map 写入流out 。

此函数要求键和值的类型实现operator<<() 接口。

另请参阅 QDataStream 运算符的格式。

[since 6.12] bool operator<=(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

如果lhs 在字典序上小于或等于 rhs,则返回true ;否则返回false 。

如果键类型Key 和映射类型T 均提供了operator<=>() (在 C++20 模式下)、compareThreeWay() 辅助方法或operator<() 中的任意一种,则此运算符可用。

该函数在 Qt 6.12 中引入。

[since 6.12] auto operator<=>(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

按字典顺序比较lhs 和rhs 的内容。返回最强适用类别类型的结果。

注意: 仅当键类型Key 和映射类型T 均满足std::three_way_comparable 概念的要求,或提供operator<() 时,此运算符 在 C++20 模式下才可用。在此情况下,< 、<= 、> 和>= 运算符由operator<=>() 和operator==() 合成而来。

该函数于 Qt 6.12 中引入。

bool operator==(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

如果 `lhs ` 等于 `rhs`,则返回 `true `;否则返回 `false`。

如果两个映射包含相同的 (键, 值) 对,则认为它们相等。

此函数要求键和值的类型都实现了operator==() 接口。

另请参阅 operator!=()。

[since 6.12] bool operator>(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

如果lhs 在字典序上大于 rhs ,则返回true ;否则返回false 。

如果键类型Key 和映射类型T 均提供了operator<=>() (在 C++20 模式下)、compareThreeWay() 辅助方法或operator<() 中的任意一种,则此运算符可用。

该函数首次出现在 Qt 6.12 中。

[since 6.12] bool operator>=(const QMap<Key, T> &lhs, const QMap<Key, T> &rhs)

如果lhs 在字典序上大于或等于 rhs,则返回true ;否则返回false 。

如果键类型Key 和映射类型T 均提供了operator<=>() (在 C++20 模式下)、compareThreeWay() 辅助方法或operator<() 中的任意一种,则该运算符可用。

该函数于 Qt 6.12 中引入。

template <typename Key, typename T> QDataStream &operator>>(QDataStream &in, QMap<Key, T> &map)

将流in 中的映射读取到map 中。

此函数要求键和值的类型实现operator>>() 接口。

另请参阅 QDataStream 运算符的格式。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.