遍歷QMap

一、遍歷QMap容器

QMap的特點是它是一種有序的鍵值對容器。我們可以按照鍵的順序遍歷所有的鍵值對,使用QMap的foreach循環即可。

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

foreach(QString key, map.keys())
{
    qDebug() << key << ":" << map.value(key);
}

輸出結果為:

one : 1
three : 3
two : 2

可以看到,QMap會按照鍵的順序進行遍歷,輸出的結果是有序的。

二、遍歷QMap的key

有時候我們只需要遍歷QMap的鍵,不需要訪問每個鍵對應的值,這時候可以使用QMap::keys()函數獲取所有鍵的列表,然後使用foreach循環遍歷。

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

foreach(QString key, map.keys())
{
    qDebug() << key;
}

輸出結果為:

one
three
two

三、遍歷QMap 修改value

有時候我們需要在遍歷QMap的過程中修改它的值。這時候不能直接修改值,因為QMap使用的是內部節點結構,直接修改值可能導致節點結構不一致,影響QMap的使用。

一種可行的方法是使用QMap::iterator。

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

for(QMap<QString, int>::iterator it = map.begin(); it != map.end(); ++it)
{
    QString key = it.key();
    int value = it.value();

    if(key == "two")
    {
        it.value() = 20;
    }
    qDebug() << key << ":" << value;
}

輸出結果為:

one : 1
three : 3
two : 20

可以看到,我們使用QMap::iterator遍歷QMap,然後使用迭代器的value()函數修改值。

四、遍歷Map的幾種方式

在遍歷QMap的過程中,也可以使用STL中的算法庫來進行遍歷。

例如,使用std::for_each和Lambda表達式:

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

std::for_each(map.begin(), map.end(), [](QMap<QString, int>::value_type pair){
    qDebug() << pair.first << ":" << pair.second;
});

輸出結果與上面的例子一樣。

還可以使用std::transform和std::ostream_iterator來將QMap輸出到流中:

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

std::transform(map.constBegin(), map.constEnd(), std::ostream_iterator<std::pair<QString, int>>(std::cout, ", "), [](QMap<QString, int>::value_type pair){
    return pair;
});

輸出結果為:

("one", 1), ("three", 3), ("two", 2),

五、遍歷QMap中所有的key

有時候我們需要查找QMap中的某一個key是否存在,可以使用QMap::contains()函數來檢查。也可以遍歷QMap的所有鍵,然後查找。

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

QString keyToFind = "two";
bool foundKey = false;
foreach(QString key, map.keys())
{
    if(key == keyToFind)
    {
        foundKey = true;
        break;
    }
}

if(foundKey)
{
    qDebug() << keyToFind << "found";
}
else
{
    qDebug() << keyToFind << "not found";
}

輸出結果為:

two found

六、遍歷QMap中所有的key qt

QMap類提供了一個keys()函數,可以返回一個QList類型的所有key列表。下面的例子演示了如何使用QList的一些基本函數,在遍歷QMap中所有的key時,更好地操作數據。

QMap<QString, QString> map;
map.insert("one", "1");
map.insert("two", "2");
map.insert("three", "3");

foreach(QString key, map.keys())
{
    QString value = map.value(key);
    qDebug() << key << ":" << value;
}

QList<QString> keys = map.keys();

QString keyToFind = "two";
if(keys.contains(keyToFind))
{
    qDebug() << keyToFind << "found";
}
else
{
    qDebug() << keyToFind << "not found";
}

keys.removeOne(keyToFind);

foreach(QString key, keys)
{
    QString value = map.value(key);
    qDebug() << key << ":" << value;
}

keys.clear();

foreach(QString key, keys)
{
    qDebug() << key;
}

輸出結果為:

one : 1
three : 3
two : 2
two found
one : 1
three : 3

七、遍歷QMap中所有的key提示second不是成員

使用QMap::iteretor雖然方便,但是會提示“’second’ is not a member of QMap::iterator”錯誤,這是因為QMap::iterator是QMap::value_type類型的迭代器,而value_type是一個鍵值對類型。

解決這個問題的方法是在使用迭代器的時候,使用QMap::iterator::value()函數來獲取值。

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

for(QMap<QString, int>::iterator it = map.begin(); it != map.end(); ++it)
{
    QString key = it.key();
    int value = it.value();

    if(key == "two")
    {
        it.value() = 20;
    }
    qDebug() << key << ":" << value;
}

輸出結果與前面的例子一樣。

八、QMap取值

獲取QMap中某一個key對應的value,有兩種方法。

一種是使用QMap::value()函數:

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

int value = map.value("two", -1);
qDebug() << value;

輸出結果為:

2

還可以使用QMap::operator[]運算符:

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

int value = map["two"];
qDebug() << value;

輸出結果為:

2

九、QMap迭代器遍歷

QMap提供了兩個類型的迭代器:QMap::const_iterator和QMap::iterator,常量迭代器用於遍歷QMap時只能讀取值,而非常量迭代器用於修改QMap中的值。

使用QMap::const_iterator類型的迭代器:

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

for(QMap<QString, int>::const_iterator it = map.constBegin(); it != map.constEnd(); ++it)
{
    QString key = it.key();
    int value = it.value();
    qDebug() << key << ":" << value;
}

輸出結果與前面的例子一樣。

使用QMap::iterator類型的迭代器:

QMap<QString, int> map;
map.insert("one", 1);
map.insert("two", 2);
map.insert("three", 3);

for(QMap<QString, int>::iterator it = map.begin(); it != map.end(); ++it)
{
    QString key = it.key();
    int value = it.value();

    if(key == "two")
    {
        it.value() = 20;
    }
    qDebug() << key << ":" << value;
}

輸出結果與前面的例子一樣。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/285046.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:43
下一篇 2024-12-22 15:43

相關推薦

  • Python遍歷集合中的元素

    本文將從多個方面詳細闡述Python遍歷集合中的元素方法。 一、for循環遍歷集合 Python中,使用for循環可以遍歷集合中的每個元素,代碼如下: my_set = {1, 2…

    編程 2025-04-29
  • Python如何遍歷字典中的key和value

    本文將詳細講解Python中如何遍歷字典中的key和value,包括多種遍歷方式以及在遍歷過程中的一些應用場景。 一、遍歷字典中的key和value 在Python中,字典是一種無…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 二叉樹非遞歸先序遍歷c語言

    本文將為您詳細介紹二叉樹的非遞歸先序遍歷算法,同時提供完整的C語言代碼示例。通過本文,您將了解到二叉樹的先序遍歷算法,以及非遞歸實現的方式。 一、二叉樹的先序遍歷算法介紹 在介紹二…

    編程 2025-04-28
  • Python如何遍歷列表

    在Python編程中,列表是一種常用的數據類型,它允許我們存儲多個值。但是,我們如何遍歷列表並對其中的每個值進行操作呢? 一、for循環遍歷列表 fruits = [‘apple’…

    編程 2025-04-28
  • Python遍歷字典刪除元素

    本文主要介紹Python中如何遍歷字典並刪除元素。在實際應用中,遍歷字典並刪除元素是一種非常常見的操作,但需要注意的是,直接在字典中刪除元素可能會改變字典中其他元素的索引順序,因此…

    編程 2025-04-28
  • Python遍歷文件夾中的shp文件

    對於GIS分析領域的開發工程師,遍歷文件夾中的shp文件是一個常見的需求。Python提供了一種非常便捷的方法來實現這個功能。本文將從以下幾個方面進行講解: 一、`os`模塊的使用…

    編程 2025-04-27
  • Python中遍歷字符串中的數字兩位數及其應用

    本文將從多個方面詳細闡述Python中遍歷字符串中的數字兩位數的應用及實現方法。 一、提取字符串中的數字兩位數 Python中提取字符串中的數字兩位數可以使用正則表達式,具體代碼如…

    編程 2025-04-27
  • Python中for循環遍歷列表

    本文將全方位詳細介紹Python中for循環遍歷列表的方法和技巧,幫助您更加深入理解並靈活運用Python中的for循環。 一、for循環遍歷列表的基礎用法 在Python中使用f…

    編程 2025-04-27
  • forof遍歷對象的詳細闡述

    forof是一種ES6的語法糖,用於遍歷可迭代對象。相較於傳統的for循環和forEach方法,forof更加簡潔、易讀,並且可以遍歷各種類型的數據。 一、基本語法 forof的基…

    編程 2025-04-25

發表回復

登錄後才能評論