【发布时间】:2017-01-23 14:19:06
【问题描述】:
我正在构建一个应用程序,用于接收来自不同货币交易所的价格数据更新。现在我需要选择最高效的容器。容器将使用 Entry 类型的元素:
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 是这个应用程序的最佳选择还是应该使用另一个容器?
【问题讨论】:
-
最好的方法是找到潜在的最佳候选者(std::list 可能很好)并测量实际性能,看看它是否符合您的需求。
-
您将如何确保在列表中排序?在您的情况下,插入最多为 O(log(n)) ,因为您需要找到在列表中插入的位置。
-
std::list具有恒定的时间插入和擦除,但您仍然需要遍历列表以找到要插入/擦除的位置(这很慢)。您是否需要始终订购容器,还是可以不订购,然后仅在需要打印/保存/等容器时订购? -
您在示例中重复了条目。这是否意味着您可以同时拥有重复条目和更新现有条目?如果是这样,您如何区分这两者?
标签: c++ stl containers