c++ Qt框架中的各种集合详解

C++ Qt框架中的各种集合详解

文章目录

  • C++ Qt框架中的各种集合详解
    • 一、QList
    • 二、QVector
    • 三、QMap
    • 四、QHash
    • 五、QSet
    • 六、QLinkedList
    • 七、QStack
    • 八、QQueue
    • 九、QMultiMap 和 QMultiHash

一、QList

QList是一个动态数组,类似于C++标准库的std::vector。它可以存储各种类型的元素,并提供了插入、删除和访问元素的方法。

#include 

int main() {
    QList<int> numbers;
    numbers << 1 << 2 << 3 << 4;

    // 访问元素
    int secondNumber = numbers.at(1); // 2

    // 插入元素
    numbers.insert(2, 5);

    // 删除元素
    numbers.removeOne(3);

    return 0;
}

二、QVector

QVector 类似于 QList,但适用于需要高效连续内存存储的情况。

#include 

int main() {
    QVector<QString> names;
    names << "Alice" << "Bob" << "Charlie";

    // 使用索引访问元素
    QString secondName = names[1]; // "Bob"

    return 0;
}

三、QMap

QMap 是一个关联数组,存储键-值对,键是唯一的,并按键的排序顺序排列。

#include 

int main() {
    QMap<QString, int> ageMap;
    ageMap.insert("Alice", 25);
    ageMap.insert("Bob", 30);
    ageMap.insert("Charlie", 28);

    // 通过键访问值
    int bobAge = ageMap.value("Bob"); // 30

    return 0;
}

四、QHash

QHash 是一个散列表,存储键-值对,具有快速查找性能,但不保持键的顺序。

#include 

int main() {
    QHash<QString, QString> cityCountry;
    cityCountry.insert("Paris", "France");
    cityCountry.insert("Tokyo", "Japan");
    cityCountry.insert("New York", "USA");

    // 使用键查找值
    QString tokyoCountry = cityCountry.value("Tokyo"); // "Japan"

    return 0;
}

五、QSet

QSet 是一个无序集合,存储不重复的值。

#include 

int main() {
    QSet<int> numbers;
    numbers << 3 << 5 << 7 << 5; // 注意:重复的值只会存储一次

    // 判断值是否存在
    bool containsSeven = numbers.contains(7); // true

    return 0;
}

六、QLinkedList

QLinkedList 是一个双向链表,适用于频繁插入和删除操作。

#include 

int main() {
    QLinkedList<QString> names;
    names << "Alice" << "Bob" << "Charlie";

    // 在链表中插入元素
    names.insert(names.begin(), "David");

    // 从链表中移除元素
    names.removeOne("Bob");

    return 0;
}

七、QStack

QStack 是一个堆栈,支持后进先出(LIFO)操作。

#include 

int main() {
    QStack<int> stack;
    stack.push(10);
    stack.push(20);
    stack.push(30);

    // 弹出栈顶元素
    int poppedValue = stack.pop(); // 30

    return 0;
}

八、QQueue

QQueue 是一个队列,支持先进先出(FIFO)操作。

#include 

int main() {
    QQueue<QString> tasks;
    tasks.enqueue("Task 1");
    tasks.enqueue("Task 2");
    tasks.enqueue("Task 3");

    // 出队列
    QString nextTask = tasks.dequeue(); // "Task 1"

    return 0;
}

九、QMultiMap 和 QMultiHash

这些类类似于 QMapQHash,但允许多个键对应同一个值。

#include 

int main() {
    QMultiMap<QString, int> scores;
    scores.insert("Alice", 90);
    scores.insert("Bob", 85);
    scores.insert("Alice", 95);

    // 获取所有 Alice 的分数
    QList<int> aliceScores = scores.values("Alice"); // [90, 95]

    return 0;
}

你可能感兴趣的:(C++学习,Qt学习,c++,qt,开发语言)