Qt容器:QMap

一、描述

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

二、成员函数

1、QMap::const_iterator constFind(const Key &key)

返回一个 const 迭代器,该迭代器指向map中具有 key 键的项目。如果地图不包含带键的项目,则该函数返回 constEnd()。

    QMap<QString, int> map;
    map["one"] = 1;
    map["three"] = 3;
    map["seven"] = 7;

    auto it = map.constFind("one");
    qDebug()<<it.key()<<it.value();

2、constKeyValueBegin() 、constKeyValueEnd()

    QMap<QString, int> map;
    map["one"] = 1;
    map["three"] = 3;
    map["seven"] = 7;

    for(auto it = map.constKeyValueBegin();it != map.constKeyValueEnd();++it)
        qDebug()<<it->first<<it->second;

 3、bool contains(const Key &key)

是否包含键。

4、 QMap::size_type count(const Key &key)

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

5、QPair<QMap::iterator, QMap::iterator> equal_range(const Key &key) 

返回两个迭代器。

迭代器1是指向当前 map 容器中第一个大于或等于 key 的键值对的迭代器(lowerBound())。

迭代器2是指向当前 map 容器中第一个大于 key 的键值对的迭代器。(upperBound())

    QMap<QString, int> map;
    map["one1"] = 1;
    map["one2"] = 2;
    map["one3"] = 3;
    map["one4"] = 4;
    map["one5"] = 5;

    auto pair = map.equal_range("one2");
    qDebug()<<(pair.first.key())<<(pair.first.value());
    qDebug()<<(pair.second.key())<<(pair.second.value());

6、QMap::iterator erase(QMap::const_iterator pos)

      QMap::iterator erase(QMap::const_iterator first, QMap::const_iterator last)

从映射中移除迭代器 pos 指向的 (key, value) 对,并返回指向映射中下一项的迭代器。

            auto it = map.begin();
            while (it != map.end())
            {
                if(......)
                    it = map.erase(it);
                else
                    ++it;
            }

7、QMap::iterator find(const Key &key)

查找key,若找不到返回end()。

8、T & first() / const Key & firstKey()       T & last() / const Key & lastKey()

返回map中第一个、最后一个 value / key的引用。

9、QMap::iterator insert(const Key &key, const T &value)

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

插入一个具有键 key 和 value 值的新项目。如果已经有一个带有键 key 的项目,则该项目的值将替换为 value。

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

移动map中的所有项。如果map是隐式共享的,那么项目将被复制。

10、Key key(const T &value, const Key &defaultKey = Key())

返回第一个具有 value 值的键,如果映射不包含具有 value 值的项目,则返回 defaultKey。

此函数可能很慢(O(n)),因为 QMap 的内部数据结构针对按键而不是按值进行快速查找进行了优化。

11、keyBegin() / keyEnd()        keyValueBegin() / keyValueEnd()

键 / 值的迭代器。

12、QList<Key> keys()以升序返回包含映射中所有键的列表。顺序保证与 values() 使用的顺序相同。

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

13、QList<Key> keys(const T &value)

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

此函数可能很慢(O(n)),因为 QMap 的内部数据结构针对按键而不是按值进行快速查找进行了优化。

14、QMap::iterator lowerBound(const Key &key)

返回一个迭代器,该迭代器指向第一个大于或等于 key 的键值对。

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

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

15、QMap::iterator upperBound(const 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()

16、QMap::size_type remove(const Key &key)

删除所有具有 key 键的项目。如果删除之前key存在于容器中,则返回 1,否则返回 0。

17、template <typename Predicate> QMap::size_type removeIf(Predicate pred) 

移除谓词 pred 为其返回 true 的所有元素。

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

返回删除的元素数。

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

    map.removeIf([](const QMap<int, QString>::iterator it)
    {
        return it.key() > 8;
    });
    map.removeIf([](const std::pair<int, QString> pair)
    {
        return pair.first > 8;
    });

    for(auto & m : map)
    {
        qDebug()<<m;
    }

18、T take(const Key &key)

从地图中删除具有键 key 的项目并返回与其关联的

如果该项目在地图中不存在,则该函数仅返回一个默认构造的值。

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

19、T value(const Key &key, const T &defaultValue = T())

返回与键key关联的值。如果不包含带key的项目,则返回 defaultValue。

20、QList<T> values() 

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

此函数以线性时间创建一个新列表。可以通过从 keyValueBegin() 迭代到 keyValueEnd() 来避免所需的时间和内存使用。


三、相关非成员

1、template <typename Key, typename T, typename Predicate> qsizetype erase_if(QMap<Key, T> &map, Predicate pred)

removeIf() 用法相似。

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

    erase_if(map,[](const QMap<int, QString>::iterator it)
    {
        return it.key() > 8;
    });

    erase_if(map,[](const std::pair<int, QString> pair)
    {
        return pair.first > 8;
    });

    for(auto & m : map)
    {
        qDebug()<<m;
    }
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值