QMultiMap类

template <typename Key, typename T> class QMultiMap

QMultiMap类是一个模板类,它提供了一个具有多个等效键的关联数组。 更多...

头文件 #include <QMultiMap>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意:本类中所有函数都是重入的。

公共类型

公共函数

QMultiMap()
QMultiMap(std::initializer_list<std::pair<Key, T>> list)
(since 6.0) QMultiMap(const QMap<Key, T> &other)
(since 6.0) QMultiMap(QMap<Key, T> &&other)
QMultiMap(const std::multimap<Key, T> &other)
QMultiMap(std::multimap<Key, T> &&other)
QMultiMap(const QMultiMap<Key, T> &other)
QMultiMap(QMultiMap<Key, T> &&other)
~QMultiMap()
(since 6.4) autoasKeyValueRange() &
(since 6.4) autoasKeyValueRange() const &
(since 6.4) autoasKeyValueRange() &&
(since 6.4) autoasKeyValueRange() const &&
QMultiMap<Key, T>::iteratorbegin()
QMultiMap<Key, T>::const_iteratorbegin() const
QMultiMap<Key, T>::const_iteratorcbegin() const
QMultiMap<Key, T>::const_iteratorcend() const
voidclear()
QMultiMap<Key, T>::const_iteratorconstBegin() const
QMultiMap<Key, T>::const_iteratorconstEnd() const
QMultiMap<Key, T>::const_iteratorconstFind(const Key &key) const
QMultiMap<Key, T>::const_iteratorconstFind(const Key &key, const T &value) const
QMultiMap<Key, T>::const_key_value_iteratorconstKeyValueBegin() const
QMultiMap<Key, T>::const_key_value_iteratorconstKeyValueEnd() const
boolcontains(const Key &key) const
boolcontains(const Key &key, const T &value) const
QMultiMap<Key, T>::size_typecount(const Key &key) const
QMultiMap<Key, T>::size_typecount(const Key &key, const T &value) const
QMultiMap<Key, T>::size_typecount() const
boolempty() const
QMultiMap<Key, T>::iteratorend()
QMultiMap<Key, T>::const_iteratorend() const
std::pair<QMultiMap<Key, T>::iterator, QMultiMap<Key, T>::iterator>equal_range(const Key &key)
std::pair<QMultiMap<Key, T>::const_iterator, QMultiMap<Key, T>::const_iterator>equal_range(const Key &key) const
QMultiMap<Key, T>::iteratorerase(QMultiMap<Key, T>::const_iterator pos)
(since 6.0) QMultiMap<Key, T>::iteratorerase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)
QMultiMap<Key, T>::iteratorfind(const Key &key)
QMultiMap<Key, T>::const_iteratorfind(const Key &key) const
QMultiMap<Key, T>::const_iteratorfind(const Key &key, const T &value) const
T &first()
const T &first() const
const Key &firstKey() const
QMultiMap<Key, T>::iteratorinsert(const Key &key, const T &value)
QMultiMap<Key, T>::iteratorinsert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value)
boolisEmpty() const
Keykey(const T &value, const Key &defaultKey = Key()) const
QMultiMap<Key, T>::key_iteratorkeyBegin() const
QMultiMap<Key, T>::key_iteratorkeyEnd() const
QMultiMap<Key, T>::key_value_iteratorkeyValueBegin()
QMultiMap<Key, T>::const_key_value_iteratorkeyValueBegin() const
QMultiMap<Key, T>::key_value_iteratorkeyValueEnd()
QMultiMap<Key, T>::const_key_value_iteratorkeyValueEnd() const
QList<Key>keys() const
QList<Key>keys(const T &value) const
T &last()
const T &last() const
const Key &lastKey() const
QMultiMap<Key, T>::iteratorlowerBound(const Key &key)
QMultiMap<Key, T>::const_iteratorlowerBound(const Key &key) const
QMultiMap<Key, T>::size_typeremove(const Key &key)
QMultiMap<Key, T>::size_typeremove(const Key &key, const T &value)
(since 6.1) QMultiMap<Key, T>::size_typeremoveIf(Predicate pred)
QMultiMap<Key, T>::iteratorreplace(const Key &key, const T &value)
QMultiMap<Key, T>::size_typesize() const
voidswap(QMultiMap<Key, T> &other)
Ttake(const Key &key)
std::multimap<Key, T>toStdMultiMap() const &
QList<Key>uniqueKeys() const
QMultiMap<Key, T> &unite(const QMultiMap<Key, T> &other)
QMultiMap<Key, T> &unite(QMultiMap<Key, T> &&other)
QMultiMap<Key, T>::iteratorupperBound(const Key &key)
QMultiMap<Key, T>::const_iteratorupperBound(const Key &key) const
Tvalue(const Key &key, const T &defaultValue = T()) const
QList<T>values() const
QList<T>values(const Key &key) const
QMultiMap<Key, T> &operator=(const QMultiMap<Key, T> &other)
QMultiMap<Key, T> &operator=(QMultiMap<Key, T> &&other)
(since 6.1) qsizetypeerase_if(QMultiMap<Key, T> &map, Predicate pred)
booloperator!=(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QMultiMap<Key, T>operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QMultiMap<Key, T>operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator<<(QDataStream &out, const QMultiMap<Key, T> &map)
booloperator==(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)
QDataStream &operator>>(QDataStream &in, QMultiMap<Key, T> &map)

详细描述

QMultiMap<Key, T> 是 Qt 的通用 容器类 之一。它存储 (键,值) 对,并提供了通过键快速查找的功能。

QMultiMap 和 QMultiHash 提供了非常类似的功能。区别是

  • QMultiHash 提供的平均查找速度比 QMultiMap 快。 (详情见 算法复杂度。)
  • 在遍历 QMultiHash 时,项目是无序的。在 QMultiMap 中,项目总是按键排序。
  • QMultiHash 的键类型必须提供 operator==() 和全局 qHash(Key) 函数。QMultiMap 的键类型必须提供 operator<() 来指定一个全序。自 Qt 5.8.1 以来,还可以安全地将指针类型用作键,即使底层 operator<() 不提供全序也是如此。

以下是一个示例 QMultiMap,具有 QString 键和 int

QMultiMap<QString, int> multimap;

要将 (键,值) 对插入到多映射中,可以使用 insert()

multimap.insert("a", 1);
multimap.insert("b", 3);
multimap.insert("c", 7);
multimap.insert("c", -5);

这会将以下三个 (键,值) 对插入到 QMultiMap 中: ("a", 1), ("b", 3), ("c", 7),以及 ("c", -5);请注意,允许键重复。

要查找值,请使用 find() 或 value()

int num2 = multimap.value("a"); // 1
int num3 = multimap.value("thirteen"); // not found; 0
int num3 = 0;
auto it = multimap.constFind("b");
if (it != multimap.cend()) {
    num3 = it.value();
}

如果映射中没有指定键的项目,这些函数将返回一个 默认构造值

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

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

// better:
auto it = multimap.find("TIMEOUT");
if (it != multimap.end())
    timeout = it.value();

还有一个 value() 重载,如果指定键没有项目,则使用其第二个参数作为默认值

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

如果想要遍历存储在 QMultiMap 中的所有 (键,值) 对,可以使用迭代器。QMultiMap 提供了 Java-style 迭代器(QMultiMapIteratorQMutableMultiMapIterator)和 STL-style 迭代器(QMultiMap::const_iteratorQMultiMap::iterator)。以下是如何使用 Java-style 迭代器遍历 QMultiMap<QString, int>

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

这是相同的代码,但这次使用的是STL风格的迭代器。

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

项目按升序列表键顺序遍历。

QMultiMap允许每个键有多个值。如果你用已存在于地图中的键调用insert(),则会插入一个新的(key, value)对。例如:

multimap.insert("plenty", 100);
multimap.insert("plenty", 2000);
// multimap.size() == 2

如果你想检索单个键的所有值,你可以使用values(const Key &key),它返回一个QList<T>。

QList<int> values = multimap.values("plenty");
for (auto i : std::as_const(values))
    cout << i << endl;

具有相同键的项目从最近插入的到最远插入的可用。另一种方法是调用find()来获取具有键的第一个项目的STL-style迭代器,然后从那里开始迭代。

auto i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << endl;
    ++i;
}

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

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

可以从多映射中以多种方式删除项目。一种方法是调用remove(); 这将删除具有给定键的任何项目。另一种方法是通过使用QMutableMultiMapIterator::remove()。此外,您可以使用clear()来清除整个映射。

可以通过调用unite(),使用operator+(),使用operator+=()来合并两个多映射。例如:

QMultiMap<QString, int> map1, map2, map3;

map1.insert("plenty", 100);
map1.insert("plenty", 2000);
// map1.size() == 2

map2.insert("plenty", 5000);
// map2.size() == 1

map3 = map1 + map2;
// map3.size() == 3

QMultiMap的键和值数据类型必须是assignable data types。这涵盖了您可能遇到的大多数数据类型,但编译器不会允许您将QWidget存储为值;相反,存储一个QWidget *。此外,QMultiMap的键类型必须提供operator<()。QMap使用它来保持项目排序,并假定如果既不满足x < y也不满足y < x,则两个键xy是相等的。

示例

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

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

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

在示例中,我们首先比较员工的姓名。如果它们相等,我们比较他们的出生日期以打破平局。

另请参阅QMultiMapIteratorQMutableMultiMapIteratorQMultiHash

成员类型文档

QMultiMap::ConstIterator

Qt样式的同义词QMultiMap::const_iterator

QMultiMap::Iterator

Qt样式的同义词QMultiMap::iterator

QMultiMap::const_key_value_iterator

QMultiMap::const_key_value_iterator类型定义提供了一种QMultiMap的STL-style迭代器。

QMultiMap::const_key_value_iterator基本上与QMultiMap::const_iterator相同,除了operator*()返回键/值对而不是值。

另请参阅QKeyValueIterator

[别名] QMultiMap::difference_type

为ptrdiff_t提供的类型定义。为了与STL兼容性。

[别名] QMultiMap::key_type

为Key提供的类型定义。为了与STL兼容性。

QMultiMap::key_value_iterator

QMultiMap::key_value_iterator类型定义提供了一种QMultiMap的STL-style迭代器。

QMultiMap::key_value_iterator基本上与QMultiMap::iterator相同,区别在于operator*()返回键/值对而不是值。

另请参阅QKeyValueIterator

[别名] QMultiMap::mapped_type

T 的别名。提供以符合 STL。

[别名] QMultiMap::size_type

int 的别名。提供以符合 STL。

成员函数文档

[自 6.4] auto QMultiMap::asKeyValueRange() &

[自 6.4] auto QMultiMap::asKeyValueRange() &&

[自 6.4] auto QMultiMap::asKeyValueRange() const &

[自 6.4] auto QMultiMap::asKeyValueRange() const &&

返回一个范围对象,允许以键/值对的形式迭代此多映射。例如,此范围对象可用于基于范围的 for 循环中,并结合结构化绑定声明

QMultiMap<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

QMultiMap::QMultiMap()

构建一个空的多映射。

另请参阅clear()。

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

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

[显式,自 6.0] QMultiMap::QMultiMap(const QMap<Key, T> &other)

构建一个与 other 相对应的多映射。

此函数从 Qt 6.0 开始引入。

[显式,自 6.0] QMultiMap::QMultiMap(QMap<Key, T> &&other)

如果 other 是共享的,则构建一个多映射,该映射为 other 的副本。否则,通过从 other 中移动元素来构建一个多映射。

此函数从 Qt 6.0 开始引入。

[显式] QMultiMap::QMultiMap(const std::multimap<Key, T> &other)

构建 other 的副本。

另请参阅toStdMultiMap()。

[显式] QMultiMap::QMultiMap(std::multimap<Key, T> &&other)

other 中移动以构建多映射。

另请参阅toStdMultiMap()。

[默认] QMultiMap::QMultiMap(const QMultiMap<Key, T> &other)

构建 other 的副本。

此操作在常量时间内发生,因为QMultiMap是隐式共享的。这使得从函数返回QMultiMap非常快。如果共享实例被修改,它将被复制(复制时写入),这需要线性时间

另请参阅:operator=

[默认] QMultiMap::QMultiMap(QMultiMap<Key, T> &&other)

移动构造一个QMultiMap实例,使其指向other所指向的同一对象。

[默认] QMultiMap::~QMultiMap()

销毁多映射。对多映射中值的引用以及此多映射的所有迭代器均失效。

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

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

另请参阅:constBegin() 和 end

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

这是一个重载函数。

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

返回一个指向多映射中第一个项目的const STL风格迭代器

另请参阅:begin() 和 cend

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

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

另请参阅:cbegin() 和 end

void QMultiMap::clear()

从多映射中删除所有项目。

另请参阅:remove

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

返回一个指向多映射中第一个项目的const STL风格迭代器

另请参阅:begin() 和 constEnd

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

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

另请参阅:constBegin() 和 end

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

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

如果多映射中没有键为key的项目,则该函数返回 constEnd

另请参阅:find() 和 QMultiMap::constFind()。

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

返回一个指向地图中具有键key和值value的项的迭代器。

如果地图中不包含此类项,则函数返回constEnd()。

另请参阅QMap::constFind()。

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

返回一个指向多地图的第一个条目的常量STL样式迭代器

另请参阅keyValueBegin()。

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

返回一个指向多地图中最后一条已知条目后面的虚拟条目的常量STL样式迭代器

另请参阅constKeyValueBegin()。

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

如果多地图包含键key的项,则返回true;否则返回false

另请参阅count()。

bool QMultiMap::contains(const Key &key, const T &value) const

如果多地图包含键key和值value的项,则返回true;否则返回false

另请参阅count()。

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

返回与键key关联的项数。

另请参阅contains()和QMultiMap::count()。

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

返回具有键key和值value的项数。

另请参阅contains()和QMultiMap::count()。

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

这是一个重载函数。

size()相同。

bool QMultiMap::empty() const

此函数提供与STL兼容性。它与isEmpty()等效,如果地图为空,则返回true;否则返回false。

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

返回一个指向多map中最后一个元素之后假想元素的STL风格迭代器

另请参阅:begin() 和 constEnd

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

这是一个重载函数。

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

返回一对迭代器,限定存储在key下的值范围 [first, second)

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

这是一个重载函数。

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

从多map中删除迭代器pos指向的(key, value)对,并返回指向map中下一个元素的迭代器。

注意:迭代器pos必须是有效的并可 dereferenceable。

另请参阅:remove

[自 6.0起] QMultiMap<Key, T>::iterator QMultiMap::erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last)

从多map中删除迭代器范围 [first, last)指向的(key, value)对。返回指向多map中最后一个删除元素之后的元素的迭代器。

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

此函数从 Qt 6.0 开始引入。

另请参阅:remove

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

返回指向多map中键为key的项的迭代器。

如果多map中不包含键为key的项,该函数返回end()。

如果map中包含多个键为key的项,此函数返回指向最近插入的值的迭代器。其他值可以通过递增迭代器访问。例如,以下是一些遍历具有相同键的所有项的代码

auto i = multimap.find("plenty");
while (i != map.end() && i.key() == "plenty") {
    cout << i.value() << endl;
    ++i;
}

// better:
auto [i, end] = multimap.equal_range("plenty");
while (i != end) {
    cout << i.value() << endl;
    ++i;
}

另请参阅:constFind(),value(),values(),lowerBound()和upperBound()。

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

这是一个重载函数。

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

这是一个重载函数。

返回一个指向具有给定keyvalue的项的const迭代器的map。

如果map中没有此类项,则函数返回end()。

如果map中存在多个具有指定key的项,则此函数返回一个指向最新插入值的const迭代器。

T &QMultiMap::first()

返回多map中第一个值的引用,即映射到最小键的值。此函数假定多map不为空。

当未共享(或调用const版本)时,此操作执行时间为常数时间

另请参见lastfirstKeyisEmpty

const T &QMultiMap::first() const

这是一个重载函数。

const Key &QMultiMap::firstKey() const

返回多map中最小键的引用。此函数假定多map不为空。

此操作执行时间为常数时间

另请参见lastKeyfirstkeyBeginisEmpty

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

插入一个新的项,其键为key并且值为value

如果map中已存在具有相同键的项,则此函数将简单地创建一个新项。 (此行为与replace不同,后者将覆盖现有项的值。)

返回指向新元素的迭代器。

另请参见replace

QMultiMap<Key, T>::iterator QMultiMap::insert(QMultiMap<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 错误,它将被忽略,并进行常规插入。

如果提示正确并且多地图未被共享,则插入操作将以摊销的 常量时间 执行。

如果映射中已经存在具有相同键的项目,则此函数将简单地创建一个新的。

在将排序数据创建为多地图时,使用 constBegin() 首先插入最大键比使用 constEnd() 按排序顺序插入更快,因为 constEnd() - 1(用于检查提示是否有效)需要 对数时间

返回指向新元素的迭代器。

注意:请注意提示。从旧共享实例提供迭代器可能会崩溃,但也有风险会导致多地图和 pos 多地图静默损坏。

bool QMultiMap::isEmpty() const

如果多地图包含没有项,则返回 true;否则返回 false。

另请参阅大小

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

这是一个重载函数。

返回第一个具有值 value 的键,或如果多地图没有具有值 value 的项,则返回 defaultKey。如果没有提供 defaultKey,则函数返回一个 默认构造的键

此函数可能较慢(线性时间),因为 QMultiMap 的内部数据结构针对按键快速查找进行了优化,而不是按值。

另请参阅

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

返回一个指向多地图中第一个键的 const STL 风格迭代器

另请参阅keyEnd() 和 firstKey

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

返回一个指向多地图中最后一个键之后的想象中的项目的 const STL 风格迭代器

另请参阅keyBegin() 和 lastKey

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

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

另请参阅 keyValueEnd()。

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

返回一个指向多地图的第一个条目的常量STL样式迭代器

另请参阅 keyValueEnd()。

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

返回一个指向多图最后一条记录之后的虚拟条目的STL风格的迭代器。

另请参阅keyValueBegin()。

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

返回一个指向多地图中最后一条已知条目后面的虚拟条目的常量STL样式迭代器

另请参阅keyValueBegin()。

QList<Key> QMultiMap::keys() const

返回一个包含多图中所有键的列表,键按升序排列。在多图中多次出现的键在列表中也多次出现。

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

这个函数在一个新列表中以线性时间创建。可以通过从keyBegin()迭代到keyEnd()来避免所涉及的时间和内存使用。

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

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

这是一个重载函数。

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

此函数可能较慢(线性时间),因为 QMultiMap 的内部数据结构针对按键快速查找进行了优化,而不是按值。

T &QMultiMap::last()

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

当未共享(或调用const版本)时,此操作在对数时间内执行。

另请参阅 firstlastKeyisEmpty

const T &QMultiMap::last() const

这是一个重载函数。

const Key &QMultiMap::lastKey() const

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

此操作在对数时间内执行。

另请参阅 firstKeylastkeyEndisEmpty

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

返回一个指向带有键key的地图中第一个项目的迭代器。如果映射不包含带有键key的项目,则该函数返回指向与键更大的最近项目的迭代器。

示例

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

multimap.lowerBound(0);      // returns iterator to (1, "one")
multimap.lowerBound(1);      // returns iterator to (1, "one")
multimap.lowerBound(2);      // returns iterator to (5, "five")
multimap.lowerBound(5);      // returns iterator to (5, "five")
multimap.lowerBound(6);      // returns iterator to (10, "ten")
multimap.lowerBound(10);     // returns iterator to (10, "ten")
multimap.lowerBound(999);    // returns end()

如果map中包含多个键为key的项,此函数返回指向最近插入的值的迭代器。其他值可以通过递增迭代器访问。例如,以下是一些遍历具有相同键的所有项的代码

QMap<QString, int> multimap;
...
QMap<QString, int>::const_iterator i = multimap.lowerBound("HDR");
QMap<QString, int>::const_iterator upperBound = multimap.upperBound("HDR");
while (i != upperBound) {
    cout << i.value() << endl;
    ++i;
}

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

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

这是一个重载函数。

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

从多映射中删除所有具有键key的项目。返回删除的项目数量。

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

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

从多映射中删除所有具有键key和值value的项目。返回删除的项目数量。

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

[自6.1起] 模板 <typename Predicate> QMultiMap<Key, T>::size_type QMultiMap::removeIf(Predicate pred)

从多映射中删除所有使得谓词pred返回true的元素。

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

如果有任何元素被删除,则返回被删除元素的数量。

此函数自Qt 6.1开始引入。

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

QMultiMap<Key, T>::iterator QMultiMap::replace(const Key &key, const T &value)

插入一个新的项,其键为key并且值为value

如果已存在具有键key的项目,则该项的值被替换为value

如果存在多个具有键key的项目,则最新插入的项目值被替换为value

返回指向新/更新元素的迭代器。

另请参阅insert()。

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

返回多映射中(key, value)对的个数。

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

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

将一个多映射other与当前多映射交换。这个操作非常快且不会失败。

T QMultiMap::take(const Key &key)

从多映射中删除具有键key的项目并返回与之关联的值。

如果项在多映射中不存在,该函数仅返回一个默认构造的值。如果在映射中存在多个与关联的项,则仅移除并返回最后插入的一个。

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

另请参阅:remove

std::multimap<Key, T> QMultiMap::toStdMultiMap() const &

返回与这个 QMultiMap 等效的 STL 多映射。

QList<Key> QMultiMap::uniqueKeys() const

返回一个包含映射中所有键的列表,按键的升序排列。在映射中多次出现的键在返回列表中只出现一次。

QMultiMap<Key, T> &QMultiMap::unite(const QMultiMap<Key, T> &other)

other 映射中的所有项插入到本映射中。如果键是两个映射共有的,则结果映射将包含该键多次。

QMultiMap<Key, T> &QMultiMap::unite(QMultiMap<Key, T> &&other)

other 映射中的所有项移动到本映射中。如果键是两个映射共有的,则结果映射将包含该键多次。

如果 other 是共享的,则将复制这些项。

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

返回一个迭代器,指向映射中紧接最后一个键为 key 的项之后的项目。如果映射中没有键为 key 的项,则该函数返回一个指向最近键值较大的项的迭代器。

示例

QMultiMap<int, QString> multimap;
multimap.insert(1, "one");
multimap.insert(5, "five");
multimap.insert(5, "five (2)");
multimap.insert(10, "ten");

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

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

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

这是一个重载函数。

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

返回与键 key 关联的值。

如果多映射中没有键为 key 的项,则该函数返回 defaultValue。如果没有指定 defaultValue,则返回一个 默认构造的值。如果在多映射中存在多个与 key 关联的项,则返回最近插入的一个的值。

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

QList<T> QMultiMap::values() const

返回一个列表,包含映射中所有值,按键的升序排列。如果一个键与多个值关联,则该键的所有值都将出现在列表中,而不仅仅是最后插入的一个。

也请参考 keys() 和 value()。

QList<T> QMultiMap::values(const Key &key) const

返回一个包含与键 key 关联的所有值的列表,从最近插入的到最近插入的。

也请参考 keys() 和 value()。

[默认] QMultiMap<Key, T> &QMultiMap::operator=(const QMultiMap<Key, T> &other)

other 赋值到这个多映射并返回对这个多映射的引用。

[默认] QMultiMap<Key, T> &QMultiMap::operator=(QMultiMap<Key, T> &&other)

移动赋值 other 到这个 QMultiMap 实例。

相关非成员

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

从多映射 map 中移除所有由谓词 pred 返回为 true 的元素。

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

如果有任何元素被删除,则返回被删除元素的数量。

此函数自Qt 6.1开始引入。

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

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

两个多映射被认为是相等的,如果它们包含相同的(键,值)对,并且顺序相同(对于重复的键来说,这是重要的)。

此函数要求键和值类型实现 operator==()

也请参考 operator==()。

template <typename Key, typename T> QMultiMap<Key, T> operator+(const QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

返回一个包含 lhs 映射中所有项目以及 rhs 映射中所有项目的映射。如果两个映射中有一个共同的键,结果映射中将包含该键多次。

也请参考 operator+=()。

template <typename Key, typename T> QMultiMap<Key, T> operator+=(QMultiMap<Key, T> &lhs, const QMultiMap<Key, T> &rhs)

rhs 映射中的所有项目插入到 lhs 映射中,并返回结果映射。

另请参阅insert() 和 operator+

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

将多映射 map 写入流 out 中。

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

另请参阅QDataStream 操作符格式

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

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

两个多映射被认为是相等的,如果它们包含相同的(键,值)对,并且顺序相同(对于重复的键来说,这是重要的)。

此函数要求键和值类型实现 operator==()

另请参阅operator!=

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

从流 in 中读取映射到 map

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

另请参阅QDataStream 操作符格式

© 2024 Qt 公司有限公司。本文件中包含的文档贡献是各自所有者的版权。此文档按自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款进行许可。Qt 以及相应的标志是芬兰的 Qt 公司以及在全世界其他国家的商标。所有其他标志均为各自所有者的财产。