2014-09-23 93 views
0

我有一個QMAP數據結構。現在,我想在QMAP中插入QVariant類型。數據是根據優先級插入的。例如,優先級1,2等。 這些優先級是QMAP中的關鍵。但是,我可以擁有相同的關鍵值 - 意味着相同的優先級。這意味着優先級1和1可以有不同的QVariants。爲了滿足這一點,我使用insertMulti而不是插入。現在,難點在於具有相同鍵的最後一個insertMulti插入到先前插入值的頂部。現在,我怎樣才能讓它逆轉?如何在QMAP中使用insertMulti插入時顛倒相同密鑰的順序?

QMAP<int, QVariant> grp; 

grp.insertMulti(0, "HELLO"); 
grp.insetMulti(0. "Hi"); 

在讀值 -

它首先returs嗨。但是,我希望它返回HeLLO。我該怎麼做? 請不要在使用其他數據結構時給出答案。這是一個非常複雜的問題的片段。

+0

您是如何讀取數值的?請注意,有一個重載的insertMulti函數,允許您提示項目插入的位置:http://qt-project.org/doc/qt-5/qmap.html#insertMulti-2 – TheDarkKnight 2014-09-23 09:08:19

+0

我正在使用.value ()來讀取值。 – 2014-09-23 09:11:50

+0

.value()只返回一個項目。你的意思是.values(const Key和key),還是你在遍歷整個類?也許你可以添加這個代碼到你的問題。 – TheDarkKnight 2014-09-23 09:13:13

回答

0

問題 - 如果多個密鑰存儲在同一個密鑰,然後添加的最後一個值相同的密鑰將有一個偏好。根據文檔 - 返回一個列表,其中包含與鍵值關聯的所有值,從最近插入的值到最近插入的值。

解決方案 - 要將其恢復爲相同的格式 - 再次遍歷QMAP並將其插入到其他QMAP中。現在,與同一個關鍵字相關的值將再次反轉 - 基於最近訪問的基本關鍵字將位於同一個關鍵值的頂部。

QMAP<int, QVariant> grp; 

grp.insertMulti(0, "HELLO"); 
grp.insetMulti(0. "Hi"); 

解決方案

QMAP<int, QVariant> pgrp; 

QMap<int, QVariant>::const_iterator pGroupServiceIterator = grp.constBegin(); 

while (pGroupServiceIterator != grp.constEnd()) 
      { 
        pgrp.insertMulti(pGroupServiceIterator.key(),pGroupServiceIterator.value()); 

       ++pGroupServiceIterator; 
      } 

現在,您將得到打印爲「HELLO」第一,而不是喜當PGRP被遍歷並打印。

1

值如何存儲在地圖內部不是問題,而是如何以所需的「優先級」順序檢索它們。

正如你說,「數據是基於優先級插入」,並且希望以相同的順序檢索的值,可以使用QMap::values(const Key & key) const功能將文檔狀態: -

返回一個列表,其中包含從最近插入到最近插入的鍵值的所有與鍵值關聯的值。

+0

是的,但我想要與它相反被存儲。 – 2014-09-23 09:35:01

+1

你爲什麼在意它如何存儲?您將以特定順序插入它們並以這種方式檢索它們。如果你想要相反的話,你可以使用values(const Key&)函數,並從end()迭代器開始向後遍歷它。或者,按相反順序添加它們,或者我誤解了您的要求? – TheDarkKnight 2014-09-23 09:36:38

0

我會做下列方式:

QMap<int, QVariant> grp; 

grp.insertMulti(0, "HELLO"); 
grp.insertMulti(0, "Hi"); 

QList<QVariant> vl = grp.values(0); 
QString firstInserted = vl.last().toString(); // Returns the 'HELLO'. 
+0

我不想改變閱讀方法。我只想更改存儲過程。 – 2014-09-23 09:35:43

+0

@dexterous_stranger,比實現你自己的容器類。 – vahancho 2014-09-23 09:46:32

+0

我想到的一個想法是迭代並複製地圖。現在,最近使用的將會在頂端。所以,基本上相同的關鍵字現在會改變。 – 2014-09-23 09:52:37