Qhash简介

这篇博客介绍了QHash在C++中的使用,包括其无序特性和键值对覆盖规则。示例展示了QHash的插入和遍历操作,以及如何处理重复键。此外,还讲解了如何使用自定义数据类型作为键,并实现相等运算符以正确处理QHash中的元素。
摘要由CSDN通过智能技术生成

Qhash简介

  1. Qhash是无序的,插入的顺序和输出的顺序并不相同。
void Widget::on_pushButton_clicked()
{
    QHash<int, QString> m_hash;
    m_hash.insert(1, "tanglin");
    m_hash.insert(2, "renyong");
    m_hash.insert(3, "wenqiang");
    m_hash.insert(4, "laowang");
    foreach (QString value, m_hash) {
        qDebug() << value;
    }
}
//第一次调试输出
"wenqiang"
"renyong"
"tanglin"
"laowang"
//第二次调试输出
"tanglin"
"laowang"
"wenqiang"
"renyong"

2.Qhash如果插入相同的 key,则后面的 key,value 将覆盖前一次的 key,value

void Widget::on_pushButton_2_clicked()
{
    QHash<int, QString> m_hash;
    m_hash.insert(4, "laowang");
    m_hash.insert(4, "libai");
    qDebug() << m_hash.value(4);
}
//输出
"libai"
  1. 自定义数据类型
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

private:
    Ui::Widget *ui;
};

struct myDate
{
private:
    int age;
    QString name;
public:
    inline bool operator ==(const myDate &other) const
    {
        return (this->age == other.age && this->name == other.name);
    }
    myDate(int age, QString name)
    {
        this->age = age;
        this->name = name;
    }
    myDate()
    {
        this->age = 20;
        this->name = "libia";
    }
};

#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QMap>
#include <QHash>
#include <QString>
#include <QDebug>
#include <QList>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //定义一个map容器
    QMap<int, QString> map;
    //向map容器里面插入数据
    map.insert(1, "tanglin");
    map.insert(2, "renyong");
    map.insert(3, "yongxiang");
    //读取数据
    QString temp;
    temp = map.value(1);
    qDebug() << temp;
    //返回key和value的列表
    QList<int> keylist = map.keys();
    foreach (int key, keylist) {
        qDebug() << key;
    }
    QList<QString> valueList = map.values();
//    foreach (QString value, valueList) {
//        qDebug() << value;
//    }
}

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

void Widget::on_pushButton_clicked()
{
    QHash<int, QString> m_hash;
    m_hash.insert(1, "tanglin");
    m_hash.insert(2, "renyong");
    m_hash.insert(3, "wenqiang");
    m_hash.insert(4, "laowang");
    foreach (QString value, m_hash) {
        qDebug() << value;
    }
}

void Widget::on_pushButton_2_clicked()
{
    QHash<int, QString> m_hash;
    m_hash.insert(4, "laowang");
    m_hash.insert(4, "libai");
    qDebug() << m_hash.value(4);
}


//查找
void Widget::on_pushButton_3_clicked()
{
    QHash<int, QString> m_hash;
    m_hash.insert(1, "tanglin");
    m_hash.insert(2, "renyong");
    m_hash.insert(3, "wenqiang");
    m_hash.insert(4, "laowang");

    auto it = m_hash.find(3);
    if(it != m_hash.end())
    {
        qDebug() << it.value();
    }
}

//自定义数据类型
void Widget::on_pushButton_4_clicked()
{
    QHash<myDate, QString> m_hash;
    m_hash.insert(myDate(), "good");
    m_hash.insert(myDate(11, "nihao"), "bad");
    qDebug() << m_hash.value(myDate());
}

uint qHash(const myDate &selt, uint seed)
{
    return 100^seed;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值