2010-04-12 62 views
9

我的應用程序的一部分涉及渲染音頻波形。用戶將能夠放大/縮小波形。從完全縮小開始,我只想在必要的內部對音頻進行採樣,以給定分辨率繪製波形。然後,當它們放大時,異步重新採樣「缺失點」並提供更清晰的波形。 (認爲​​谷歌地圖。)我不確定用於Qt世界的最佳數據結構。理想情況下,我想存儲按時間排序的數據樣本,但可以根據需要填寫點數。什麼Qt容器類用於排序列表?

因此,例如,數據點最初可能是這樣的:

data[0 ms] = 10 
data[10 ms] = 32 
data[20 ms] = 21 
... 

但是,當他們放大,我會在必要時獲得更多的積分,也許是:

data[0 ms] = 10 
data[2 ms] = 11 
data[4 ms] = 18 
data[6 ms] = 30 
data[10 ms] = 32 
data[20 ms] = 21 
... 

注意,括號中的值是查找值(毫秒),而不是數組索引。

我應該能夠有效地查詢範圍(「所有點在10和30毫秒之間」)並且有效地插入新點。

在.net中我可能使用了一個SortedList<int, int>。 Qt中最好的類是什麼?或者我應該使用STL容器?

回答

10

QMap會自動排序,因此迭代它將產生一個排序(升序)列表。

它還提供了Qmap :: upperBound()和QMap :: lowerBound(),您可以將它用於您的測距功能。

http://doc.qt.io/qt-5/qmap.html

+0

在QHash上迭代時,項目是任意排序的。使用QMap,項目總是按鍵**排序**。 – Yash 2016-04-05 11:29:35

-3

什麼是最好的類在Qt中使用?或者我應該使用STL容器?

您可以使用std :: map。我建議只在需要將數據綁定到GUI時,纔將STL容器用於業務邏輯,而Qt容器則用於此。

編輯:改變的std ::設置爲std ::地圖

+11

我強烈反對在QT上使用STL。通過使用STL,你將失去一些非常好的QT功能,如淺拷貝。然後你將不得不轉換爲QT對象來將數據傳遞給GUI,這會導致深層複製。而且(根據Qt Developers),STL在Qt支持的所有平臺上仍然不是100%兼容的。 – 2010-04-12 16:22:55

3

我強烈建議你看看這裏:Generic Containers

你會發現不同的容器類的Qt的一個很好的總結。 ..我也建議你使用其中之一!在我看來,你可以使用QMap!

希望它有一點幫助!