QMultiMap类
template <typename Key, typename T> class QMultiMapQMultiMap类是一个模板类,它提供了一个具有多个等效键的关联数组。 更多...
头文件 | #include <QMultiMap> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 所有成员列表,包括继承成员
- 已弃用成员
- QMultiMap是隐式共享类的一部分。
注意:本类中所有函数都是重入的。
公共类型
类 | const_iterator |
类 | iterator |
类 | key_iterator |
ConstIterator | |
Iterator | |
const_key_value_iterator | |
difference_type | |
key_type | |
key_value_iterator | |
mapped_type | |
size_type |
公共函数
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) auto | asKeyValueRange() & |
(since 6.4) auto | asKeyValueRange() const & |
(since 6.4) auto | asKeyValueRange() && |
(since 6.4) auto | asKeyValueRange() const && |
QMultiMap<Key, T>::iterator | begin() |
QMultiMap<Key, T>::const_iterator | begin() const |
QMultiMap<Key, T>::const_iterator | cbegin() const |
QMultiMap<Key, T>::const_iterator | cend() const |
void | clear() |
QMultiMap<Key, T>::const_iterator | constBegin() const |
QMultiMap<Key, T>::const_iterator | constEnd() const |
QMultiMap<Key, T>::const_iterator | constFind(const Key &key) const |
QMultiMap<Key, T>::const_iterator | constFind(const Key &key, const T &value) const |
QMultiMap<Key, T>::const_key_value_iterator | constKeyValueBegin() const |
QMultiMap<Key, T>::const_key_value_iterator | constKeyValueEnd() const |
bool | contains(const Key &key) const |
bool | contains(const Key &key, const T &value) const |
QMultiMap<Key, T>::size_type | count(const Key &key) const |
QMultiMap<Key, T>::size_type | count(const Key &key, const T &value) const |
QMultiMap<Key, T>::size_type | count() const |
bool | empty() const |
QMultiMap<Key, T>::iterator | end() |
QMultiMap<Key, T>::const_iterator | end() 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>::iterator | erase(QMultiMap<Key, T>::const_iterator pos) |
(since 6.0) QMultiMap<Key, T>::iterator | erase(QMultiMap<Key, T>::const_iterator first, QMultiMap<Key, T>::const_iterator last) |
QMultiMap<Key, T>::iterator | find(const Key &key) |
QMultiMap<Key, T>::const_iterator | find(const Key &key) const |
QMultiMap<Key, T>::const_iterator | find(const Key &key, const T &value) const |
T & | first() |
const T & | first() const |
const Key & | firstKey() const |
QMultiMap<Key, T>::iterator | insert(const Key &key, const T &value) |
QMultiMap<Key, T>::iterator | insert(QMultiMap<Key, T>::const_iterator pos, const Key &key, const T &value) |
bool | isEmpty() const |
Key | key(const T &value, const Key &defaultKey = Key()) const |
QMultiMap<Key, T>::key_iterator | keyBegin() const |
QMultiMap<Key, T>::key_iterator | keyEnd() const |
QMultiMap<Key, T>::key_value_iterator | keyValueBegin() |
QMultiMap<Key, T>::const_key_value_iterator | keyValueBegin() const |
QMultiMap<Key, T>::key_value_iterator | keyValueEnd() |
QMultiMap<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 |
QMultiMap<Key, T>::iterator | lowerBound(const Key &key) |
QMultiMap<Key, T>::const_iterator | lowerBound(const Key &key) const |
QMultiMap<Key, T>::size_type | remove(const Key &key) |
QMultiMap<Key, T>::size_type | remove(const Key &key, const T &value) |
(since 6.1) QMultiMap<Key, T>::size_type | removeIf(Predicate pred) |
QMultiMap<Key, T>::iterator | replace(const Key &key, const T &value) |
QMultiMap<Key, T>::size_type | size() const |
void | swap(QMultiMap<Key, T> &other) |
T | take(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>::iterator | upperBound(const Key &key) |
QMultiMap<Key, T>::const_iterator | upperBound(const Key &key) const |
T | value(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) qsizetype | erase_if(QMultiMap<Key, T> &map, Predicate pred) |
bool | operator!=(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) |
bool | operator==(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
值
要将 (键,值) 对插入到多映射中,可以使用 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);请注意,允许键重复。
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 迭代器(QMultiMapIterator 和 QMutableMultiMapIterator)和 STL-style 迭代器(QMultiMap::const_iterator 和 QMultiMap::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循环。
可以从多映射中以多种方式删除项目。一种方法是调用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,则两个键x
和y
是相等的。
示例
#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
在示例中,我们首先比较员工的姓名。如果它们相等,我们比较他们的出生日期以打破平局。
另请参阅QMultiMapIterator、QMutableMultiMapIterator和QMultiHash。
成员类型文档
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风格迭代器。
QMultiMap<Key, T>::const_iterator QMultiMap::cend() const
返回一个指向多映射中最后一个项目之后的虚拟项目的const STL风格迭代器。
void QMultiMap::clear()
从多映射中删除所有项目。
另请参阅:remove。
QMultiMap<Key, T>::const_iterator QMultiMap::constBegin() const
返回一个指向多映射中第一个项目的const STL风格迭代器。
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风格迭代器。
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
这是一个重载函数。
返回一个指向具有给定key和value的项的const迭代器的map。
如果map中没有此类项,则函数返回end()。
如果map中存在多个具有指定key的项,则此函数返回一个指向最新插入值的const迭代器。
T &QMultiMap::first()
返回多map中第一个值的引用,即映射到最小键的值。此函数假定多map不为空。
当未共享(或调用const版本)时,此操作执行时间为常数时间。
const T &QMultiMap::first() const
这是一个重载函数。
const Key &QMultiMap::firstKey() const
返回多map中最小键的引用。此函数假定多map不为空。
此操作执行时间为常数时间。
另请参见lastKey,first,keyBegin和isEmpty。
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 风格迭代器。
QMultiMap<Key, T>::key_iterator QMultiMap::keyEnd() const
返回一个指向多地图中最后一个键之后的想象中的项目的 const STL 风格迭代器。
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()来避免所涉及的时间和内存使用。
QList<Key> QMultiMap::keys(const T &value) const
这是一个重载函数。
返回一个包含与值value相关联的所有键的列表,键按升序排列。
此函数可能较慢(线性时间),因为 QMultiMap 的内部数据结构针对按键快速查找进行了优化,而不是按值。
T &QMultiMap::last()
返回多图中最后一个值的引用,即映射到最大键的值。该函数假设映射不为空。
当未共享(或调用const版本)时,此操作在对数时间内执行。
const T &QMultiMap::last() const
这是一个重载函数。
const Key &QMultiMap::lastKey() const
返回多图中最大键的引用。该函数假设多图不为空。
此操作在对数时间内执行。
另请参阅 firstKey、last、keyEnd和isEmpty。
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的项目。返回删除的项目数量。
QMultiMap<Key, T>::size_type QMultiMap::remove(const Key &key, const T &value)
从多映射中删除所有具有键key和值value的项目。返回删除的项目数量。
[自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开始引入。
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)对的个数。
[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
返回一个列表,包含映射中所有值,按键的升序排列。如果一个键与多个值关联,则该键的所有值都将出现在列表中,而不仅仅是最后插入的一个。
QList<T> QMultiMap::values(const Key &key) const
返回一个包含与键 key 关联的所有值的列表,从最近插入的到最近插入的。
[默认]
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 映射中,并返回结果映射。
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 公司以及在全世界其他国家的商标。所有其他标志均为各自所有者的财产。