一、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-tw/n/324826.html