QPair使用

QPair类是一个模板类,它存储一对项值(key,value)。

1.原型

1
2
3
4
QPair()
QPair(QPair<TT1, TT2> &&p)
QPair(const QPair<TT1, TT2> &p)
QPair(const T1 &value1, const T2 &value2)

2.可访问的成员变量

1
2
T1 first
T2 second

3.常用接口

  • 创建一对QPair项值

    1
    QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2)
  • 交换两个QPair项值

    1
    2
    void swap(QPair<T1, T2> &other)
    void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)

等同于:

1
2
qSwap(this->first, other.first);
qSwap(this->second, other.second);

  • 赋值(=)操作

    1
    2
    QPair<T1, T2> &operator=(const QPair<TT1, TT2> &p)
    QPair<T1, T2> &operator=(QPair<TT1, TT2> &&p)
  • 比较操作
    注意:先比较T1,如果相同则再比较T2。

    1
    2
    3
    4
    5
    6
    bool operator!=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
    bool operator<(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
    bool operator<=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
    bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
    bool operator>(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
    bool operator>=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
  • 的支持
    注意:需要对T1和T2实现重载>><<

    1
    2
    QDataStream &operator>>(QDataStream &in, QPair<T1, T2> &pair)
    QDataStream &operator<<(QDataStream &out, const QPair<T1, T2> &pair)

4.示例

1
2
3
4
5
6
7
8
9
10
11
12
/* 初始化QPair */
QPair<QString, double> pair("PI", 3.14);
/* 创建QPair列表 */
QList<QPair<QString, double> > pairList;
pairList.append(pair);
pairList.append(qMakePair(QString("E"), 2.71));

/* 遍历输出 */
for (QPair<QString, double> pair : pairList) {
qDebug() << "Key: " << pair.first; // 获取第一个值
qDebug() << "Value: " << pair.second; // 获取第二个值
}

输出:

1
2
3
4
Key:  "PI"
Value: 3.14
Key: "E"
Value: 2.71

5.其他相关

  • 当QMap容器大小为1时,QMap与QPair功能基本相同;
  • QPair对应标准库模板类为std::pair
  • 类似的还有std::tuple(元组)数目不限制,而QPair和std::pair都限制为2。

6.关于更多

  • Qt君公众号后台回复”Qt容器“获取更多相关内容。