2017-01-23 50 views
1

我正在構建一個應用程序,它接收來自不同貨幣兌換處的價格數據的更新。現在我需要選擇最高效的容器。容器將用於Entry類型的元素:哪個STL容器用於Orderbook表示?

struct Entry 
{ 
    std::string exchange_name; 
    double price; 
    double amount; 
} 

參賽作品必須由他們的價格進行排序,升序:

Ex.Name Price Amount 
    "A"  1.2  23 
    "B"  1.3  3 
    "A"  1.4  1.2 
    "C"  1.5  4 
    "A"  1.6  2 

會有很多插入和刪除在容器上。我估計每秒可能達到200個。容器內的值可能不是const,因此可以爲特定條目更改金額。

到目前爲止,我得出的結論是std::list可能是一個不錯的選擇,因爲它allows constant time insert and erase operations anywhere within the sequence

std::list這個應用程序的最佳選擇還是我應該使用另一個容器?

+0

最好的方法是找到潛在的最佳候選人(std :: list可能是好的),並衡量實際的性能,看它是否符合你的需求。 – roalz

+0

如何確保在列表中訂購?在你的情況下插入最好是O(log(n)),因爲你需要找到在列表中插入的位置。 –

+0

http://john-ahlgren.blogspot.com/2013/10/stl-container-performance.html – jamek

回答

1

那麼,列表插入將是固定的時間,但您的列表應該是有序的,因此,您需要首先找到合適的插入位置。這將需要O(N)時間! 因此,選擇像std::multimap這樣的有序樹形容器會更有效率。插入或搜索將花費O(log(N))時間。價格應該是密鑰

+0

如果列表是按照有序方式構建的,則可以在log(n)中找到插入點。 –

+0

不!因爲,與數組不同,你不能在小於O(N)的時間內達到它的中間點 –

+0

然而,顯示列表需要首先從地圖中檢索所有元素,顯示它們,然後將它們插回(或者像在清空它之前複製地圖),這實際上是O(N·log(N))。如果需要在任何時候顯示列表,它可能不是一個好的選擇。 – jdehesa