QHash方法功能(QT5.12)

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QHash>
#include<QDebug>
#include<QList>
#include<QPair>

//QHash类是一个模板类,提供基于哈希表的字典。
//QHash<Key,T>是Qt的通用容器类之一。它存储(键、值)对,并提供与键关联的值的快速查找。
//QHash提供了比QMap更快的查找速度。
//在QMap上迭代时,项目总是按键排序。使用QHash,项目可以任意排序。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QHash<QString, int> hash; //定义hash对象,要定义键和值的类型
    hash.clear(); //清除整个对象
    hash["one"] = 2;
    hash["three"] = 3;
    hash["seven"] = 7;
    hash["seven"] = 9;
    hash["eight"] = 9;
    qDebug()<<hash.capacity(); //返回QHash内存。
    qDebug()<<hash.contains("three"); //查询指定键名是否存在
    qDebug()<<hash.count(); //查询表中的条目个数
    qDebug()<<hash.count("seven"); //返回与键关联的项数。
    qDebug()<<hash.empty(); //如果哈希为空,则返回true;否则返回false。
    qDebug()<<hash.isEmpty(); //如果哈希为空,则返回true;否则返回false。
    qDebug()<<hash.key(2); //根据值返回当前键值
    qDebug()<<hash.key(9,"new");//根据值返回当前键值 如果不存在就返回参数2的key

    QList<QString> keys = hash.keys(); //获取键值列表
    qDebug()<<hash.remove("one"); //删除指定键值的键值对,返回删除个数
    hash.reserve(100);//设置hash的大小(一般不用,hash有自己的算法修改长度)
    qDebug()<<hash.size(); //返回散列中的项数。
    hash.squeeze(); //减少QHash内部哈希表的大小以节省内存。(一般不用)
    QHash<QString, int> H2;
    hash.swap(H2); //交换两个hash对象
    qDebug()<<hash.take("three"); //从散列中删除带有密钥的项,并返回与之关联的值。不需要返回值就使用remove
    keys = hash.uniqueKeys();//返回包含映射中所有键的列表。在映射中多次出现的键在返回的列表中只出现一次。
    QHash<QString, int> H3;
    H3 = hash.unite(H2);//将另一个哈希中的所有项插入到此哈希中。如果两个散列共用一个键,则生成的散列将多次包含该键。
    qDebug()<<hash.value("seven"); //返回与键关联的值。
    qDebug()<<hash.value("seven", 0); //返回与键关联的值。 没有则返回参数2的值
    QList<int> values = hash.values(); //获取值列表
    values = hash.values("seven"); //返回与键关联的所有值的列表,从最近插入的值到最近插入的值。

    //迭代器
    hash.clear();
    hash["one"] = 1;
    hash["two"] = 2;
    hash["three"] = 3;
    hash["four"] = 4;
    hash["five"] = 5;
    hash["six"] = 5;
    hash["seven"] = 5;
    hash["seven"] = 7;

    QHash<QString, int>::iterator it = hash.begin(); //返回指向散列中第一项的STL样式迭代器。
    it = hash.end(); //返回一个常量STL风格的迭代器,该迭代器指向散列中最后一项的下一个指针(不可访问)
    it = hash.erase(it); //从散列中删除与(实参)迭代器pos关联的(键、值)对,并将迭代器返回到散列中的下一项。
    it = hash.find("seven");//,该迭代器指向散列中包含键的项。如果哈希不包含带键的项,则函数返回end()。

     //QHash::const_iterator QHash::begin() const
     //QHash::const_iterator QHash::end() const
     //QHash::const_iterator QHash::find(const Key &key) const
   QHash<QString, int>::const_iterator constIt = hash.cbegin();//返回指向散列中第一项的常量STL样式迭代器。
   qDebug()<<constIt.key();
   constIt = hash.cend(); //返回一个常量STL风格的迭代器,该迭代器指向散列中最后一项的下一个指针(不可访问)
   constIt = hash.constBegin(); //返回指向散列中第一项的常量STL样式迭代器。
   constIt = hash.constEnd(); //返回一个常量STL风格的迭代器,该迭代器指向散列中最后一项的下一个指针(不可访问)
    constIt = hash.constFind("seven"); //返回散列中包含键的项的子hash迭代器。没有这个键则返回 constEnd()
    hash.insert("eight",8); //插入新数据 如果已存在键值 则覆盖原值
    hash.insertMulti("eight",9); //使用键和value值插入新项。如果散列中已经有一个具有相同密钥的项,则此函数将简单地创建一个新项。

    QHash<QString, int>::const_key_value_iterator  ckvit = hash.constKeyValueBegin();//返回指向散列中第一个条目的常量STL样式迭代器。
    ckvit = hash.constKeyValueEnd(); //返回一个常量STL风格的迭代器,该迭代器指向散列中最后一项的下一个指针(不可访问)
    //QHash::const_key_value_iterator QHash::keyValueBegin() const
    //QHash::const_key_value_iterator QHash::keyValueEnd() const

    QPair<QHash<QString, int>::iterator, QHash<QString, int>::iterator> pair = hash.equal_range("seven");
    qDebug()<<"pair="<<pair.first.key()<<pair.first.value();qDebug()<<(--pair.second).key()<<(--pair.second).value();
        //返回一对迭代器,这些迭代器限定了存储在key下的值[first,second]的范围。如果该范围为空,则两个迭代器都将等于end()。
    //QPair<QHash::const_iterator, QHash::const_iterator> QHash::equal_range(const Key &key) const



     QHash<QString, int>::key_iterator keyit = hash.keyBegin(); //返回指向散列中第一个键的常量STL样式迭代器。
     keyit = hash.keyEnd(); //返回一个常量STL风格的迭代器,该迭代器指向散列中最后一项的下一个指针(不可访问)

     QHash<QString, int>::key_value_iterator  kvit = hash.keyValueBegin();//返回指向散列中第一个条目的STL样式迭代器。
     kvit = hash.keyValueEnd(); //返回一个常量STL风格的迭代器,该迭代器指向散列中最后一项的下一个指针(不可访问)


}

MainWindow::~MainWindow()
{
    delete ui;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值