QMultiMap Class
template <typename Key, typename T> class QMultiMap
QMultiMap 类是一个便利的 QMap 派生类,提供多值映射功能。更多内容…
头文件: | #include |
---|---|
qmake: | QT += core |
基类: | QMap |
注意: 该类中的所有函数都是可重入的。
公共成员函数
QMultiMap(const QMap<Key, T> &other) | |
---|---|
QMultiMap(std::initializer_list<std::pair<Key, T> > list) | |
QMultiMap() | |
typename QMap<Key, T>::const_iterator | constFind(const Key &key, const T &value) const |
bool | contains(const Key &key, const T &value) const |
int | count(const Key &key, const T &value) const |
typename QMap<Key, T>::iterator | find(const Key &key, const T &value) |
typename QMap<Key, T>::const_iterator | find(const Key &key, const T &value) const |
typename QMap<Key, T>::iterator | insert(const Key &key, const T &value) |
typename QMap<Key, T>::iterator | insert(typename QMap<Key, T>::const_iterator pos, const Key &key, const T &value) |
int | remove(const Key &key, const T &value) |
typename QMap<Key, T>::iterator | replace(const Key &key, const T &value) |
void | swap(QMultiMap<Key, T> &other) |
QList |
uniqueKeys() const |
QMultiMap<K, V> & | unite(const QMultiMap<K, V> &other) |
QList |
values(const Key &key) const |
QMultiMap<K, V> | operator+(const QMultiMap<K, V> &other) const |
QMultiMap<K, V> & | operator+=(const QMultiMap<K, V> &other) |
详细描述
QMultiMap<Key, T> 是一种 Qt 泛型容器类。它继承 QMap 并扩展了一些功能,使之可以存储多值映射。多值映射是一种允许将多个值关联到同一个键的映射;QMap 不允许多值映射。
因为 QMultiMap 继承 QMap,所有 QMap 的功能也适用于 QMultiMap。例如,可以使用 isEmpty() 测试 map 是否为空,可以使用 QMap 的迭代器类(例如 QMapIterator)遍历 QMultiMap。除此之外,它还提供 insert() 函数来插入值,如果要插入的键已经存在,该函数不会覆盖已有的值,而 replace() 函数则不同,如果 map 中已经存在要插入的键,该函数会覆盖已经存在的值。此外,该类还提供方便的 operator+() 和 operator+=() 运算符。
例子:
QMultiMap 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
与 QMap 不同,QMultiMap 不提供 operator[] 运算符。如果想用特定键访问最新插入的元素,使用 value() 或 replace()。
如果想取得单个键关联的所有值,可以使用 values(const Key &key),该函数返回一个 QList
QList values = map.values("plenty");
for (int i = 0; i < values.size(); ++i)
cout << values.at(i) << Qt::endl;
共享同一键的元素按照从最新到最早插入的顺序返回。
如果习惯用 STL 风格迭代器,可以传递键调用 find() 取得第一个元素的迭代器,从该元素开始遍历:
QMultiMap::iterator i = map.find("plenty");
while (i != map.end() && i.key() == "plenty") {
cout << i.value() << Qt::endl;
++i;
}
QMultiMap 键和值的数据类型必须是可赋值数据类型。这涵盖了大多数可能会遇到的数据类型,但是编译器不会允许存储类似 QWidget 这样的对象作为值,应该存储 QWidget *。另外,QMultiMap 的键类型必须提供 operator<() 运算符。 具体请参考 QMap 文档。
另请参阅 QMap,QMapIterator,QMutableMapIterator 和 QMultiHash。
成员函数文档
QMultiMap::QMultiMap(const QMap<Key, T> &other)
构造一个 other 的副本(可能是一个 QMap 或 QMultiMap)。
另请参阅 operator=()。
QMultiMap::QMultiMap(std::initializer_list<std::pair<Key, T> > list)
用初始化列表 list 中每个元素的副本构造一个 multi-map。
只有当程序在 C++11 模式下编译时,该函数才可用。
Qt 5.1 中引入该函数。
QMultiMap::QMultiMap()
构造一个空 map。
typename QMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const
返回迭代器,指向 map 中键为 key*,值为 *value 的元素。
如果 map 中不包含这样的元素,该函数返回 constEnd()。
Qt 4.3 中引入该函数。
另请参阅 QMap::constFind().
bool QMultiMap::contains(const Key &key, const T &value) const
如果该 map 包含键为 key*,值为 *value 的元素,返回 true
;否则返回 false
。
Qt 4.3 中引入该函数。
另请参阅 QMap::contains()。
int QMultiMap::count(const Key &key, const T &value) const
返回键为 key*,值为 *value 的元素个数。
Qt 4.3 中引入该函数。
另请参阅 QMap::count()。
typename QMap<Key, T>::iterator QMultiMap::find(const Key &key, const T &value)
返回迭代器,指向 map 中键为 key*,值为 *value 的元素。
如果 map 中不包含这样的元素,该函数返回 end()。
如果 map 包含多个键为 key (译者注:以及值为 value)的元素,函数返回指向最新插入的那个值的迭代器。
Qt 4.3 中引入该函数。
另请参阅 QMap::find()。
typename QMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const
这是一个重载函数。
返回常量迭代器,指向 map 中键为 key*,值为 *value 的元素。
如果 map 中不包含这样的元素,该函数返回 end()。
如果 map 包含多个键为 key(译者注:以及值为 value)的元素,函数返回指向最新插入的那个值的常量迭代器。
Qt 4.3 中引入该函数。
另请参阅 QMap::find()。
typename QMap<Key, T>::iterator QMultiMap::insert(const Key &key, const T &value)
用键 key 和值 value 插入一个新元素。
如果 map 中已经存在相同键的元素,该函数将创建一个新元素。(这与 replace() 不同,replace() 是覆盖已经存在元素的值。)
另请参阅 replace()。
typename QMap<Key, T>::iterator QMultiMap::insert(typename QMap<Key, T>::const_iterator pos, const Key &key, const T &value)
用键 key 和值 value 插入一个新元素,pos 用来提示插入位置。
如果以 constBegin() 作为插入位置提示,表明 key 比 map 中的任何键都小,而 constEnd() 则建议 key 大于 map 中的任何键。否则提示应该满足条件 (pos - 1).key() < key <= pos.key()。如果提示 pos 是错误的,其将被忽略,并以常规方式插入。
如果 map 中已经存在相同键的元素,该函数将创建一个新元素。
注意: 需小心对待提示。提供从旧的共享实例取得的迭代器可能引起崩溃,还会有默默污染 map 和 pos 的 map 的风险。
Qt 5.1 中引入该函数。
int QMultiMap::remove(const Key &key, const T &value)
从 map 中移除所有键为 key*,值为 *value 的元素。返回被移除元素的个数。
Qt 4.3 中引入该函数。
另请参阅 QMap::remove()。
typename QMap<Key, T>::iterator QMultiMap::replace(const Key &key, const T &value)
用键 key 和值 value 插入一个新元素。
如果已经存在键为 key 的元素,该元素的值将被 value 替换。
如果有多个键为 key 的元素,最新插入的元素的值将被 value 替换。
另请参阅 insert()。
void QMultiMap::swap(QMultiMap<Key, T> &other)
将 map other 与本 map 交换。该操作非常快,永远不失败。
Qt 4.8 中引入该函数。
QList QMultiMap::uniqueKeys() const
以升序返回 map 中所有键的列表。在 map 中多次出现的键在返回的列表中只出现一次。
Qt 4.2 中引入该函数。
QMultiMap<K, V> &QMultiMap::unite(const QMultiMap<K, V> &other)
将 other map 中的所有元素插入到本 map 中。如果一个键在两个 map 中同时存在,结果 map 将多次包含这个键。
QList QMultiMap::values(const Key &key) const
按照从最新到最早插入的顺序,返回所有与键 key 相关联的值的列表。
QMultiMap<K, V> QMultiMap::operator+(const QMultiMap<K, V> &other) const
返回一个 map,该 map 包含本 map 和 other map 中的所有元素。如果一个键在两个 map 中同时存在,结果 map 将多次包含这个键。
另请参阅 operator+=()。
QMultiMap<K, V> &QMultiMap::operator+=(const QMultiMap<K, V> &other)
将 other map 中的所有元素插入到本 map 中,返回本 map 的引用。