2010-08-04 90 views
4

可以通過插入順序循環QHash嗎?下面的方法似乎環哈希通過一些其他的因素:通過插入順序循環QHash

QHashIterator<QString, QString> i(hash); 
while (i.hasNext()) { 
    i.next(); 
    qDebug() << i.key() << ": " << i.value(); 
} 

編輯:

我想這是不可能的,但QHash我應該怎麼用呢?

+0

如果你想迭代插入順序,爲什麼你不使用QList? – mbx 2011-08-29 09:54:17

回答

12

QHash文檔,

QHash是無序的,所以iterator的 順序不能假設 預見。如果排序的關鍵是需要 ,使用QMap

所以它不可能

如果您想根據按鍵訂購,使用QMap代替..

希望它可以幫助..

編輯:

如果需要KeyValue邏輯映射並且只是它們的值,您可以使用

QList<QPair<QString,QString>> pairs; 

對於例如:

第一值可以通過

QString firstValue = pairs.at(0).first; 

類似地,對於在QPair第二值而獲得,

QString secondValue = pairs.at(0).second; 

而且可以遍歷QList檢索元件在插入的順序 ..

+0

謝謝,但我想從插入時間而不是密鑰排序散列。 – Dennis 2010-08-04 17:25:30

+0

在這種情況下,**這是不可能的**。 – liaK 2010-08-04 17:54:42

1

QHash不記得您的插入順序。它專爲快速隨機訪問而設計。您使用迭代器獲得的順序是任意的。

0

如果你只有QHash插入元素(無元素刪除),你可以並行使用一個數組/列表。這不是一個非常優雅的解決方案,但是您只需要QHash容器就無法達到您想要的效果。