一、qmultimap簡介
qmultimap是Qt中的一個關聯容器,它是一個鍵類型到值類型的映射,允許存儲相同鍵的多個值。它是通過紅黑樹實現的,所以訪問、刪除、查找等操作均具有O(log n)的效率。
二、qmultimap的用途
qmultimap的用法與qmap類似,但它允許一個鍵關聯多個值,適用於需要對鍵值進行分組的情況。例如,假設您需要將人名按照性別分組,可以使用qmultimap存儲多個同性別的人名,鍵為性別,值為人名。
三、qmultimap的創建和插入元素
創建空的qmultimap對象很簡單,只需要聲明一個qmultimap類型的變量即可:
qmultimap<QString, int> myMap;
這個例子創建了一個qmultimap對象,它的鍵類型為QString,值類型為int。
插入元素可以使用insert()函數實現,需要傳遞一個QPair對象作為參數,其中第一個元素表示鍵,第二個元素表示值:
myMap.insert(qMakePair("apple", 2));
myMap.insert(qMakePair("orange", 3));
myMap.insert(qMakePair("apple", 5));
myMap.insert(qMakePair("banana", 1));
這個例子往qmultimap中插入了四個元素,其中有兩個元素的鍵為”apple”,即”apple”關聯了兩個值2和5。
四、qmultimap的訪問元素
可以使用value()函數訪問qmultimap中的元素,需要傳遞一個鍵作為參數,如果該鍵在qmultimap中關聯了多個值,則value()函數返回最先插入的那個值:
int value = myMap.value("apple"); // 返回2
如果你需要訪問”apple”關聯的所有值,可以使用values()函數:
QList<int> values = myMap.values("apple"); // 返回{2, 5}
還可以使用constIterator()、begin()和end()函數遍歷qmultimap中的元素:
for(QMultiMap<QString, int>::const_iterator iter = myMap.constBegin(); iter != myMap.constEnd(); ++iter)
{
QString key = iter.key();
int value = iter.value();
qDebug() << key << value;
}
這個例子遍歷了整個qmultimap,輸出每個元素的鍵和值。
五、qmultimap的刪除元素
可以使用remove()函數刪除qmultimap中的元素,需要傳遞一個鍵和值作為參數,如果這個鍵關聯了多個值,則只刪除最先插入的那個值:
myMap.remove("apple", 2);
這個例子刪除了鍵為”apple”,值為2的元素。
如果你需要刪除該鍵關聯的所有值,可以使用remove()函數,只需要傳遞一個鍵作為參數:
myMap.remove("apple");
這個例子刪除了鍵為”apple”,全部值的元素。
六、qmultimap的其他操作
qmultimap還提供了其他一些常用操作,例如count()函數可以返回一個鍵在qmultimap中關聯的值的個數,isEmpty()函數可以判斷qmultimap是否為空。
七、完整代碼示例
#include <QDebug>
#include <QMultiMap>
int main()
{
// 創建一個qmultimap對象
QMultiMap<QString, int> myMap;
// 插入元素
myMap.insert(qMakePair("apple", 2));
myMap.insert(qMakePair("orange", 3));
myMap.insert(qMakePair("apple", 5));
myMap.insert(qMakePair("banana", 1));
// 訪問元素
int value = myMap.value("apple"); // 返回2
qDebug() << value;
QList<int> values = myMap.values("apple"); // 返回{2, 5}
qDebug() << values;
for(QMultiMap<QString, int>::const_iterator iter = myMap.constBegin(); iter != myMap.constEnd(); ++iter)
{
QString key = iter.key();
int value = iter.value();
qDebug() << key << value;
}
// 刪除元素
myMap.remove("apple", 2);
myMap.remove("apple");
return 0;
}
原創文章,作者:JPJYL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/324826.html
微信掃一掃
支付寶掃一掃