2017-01-23 3 views
1

私は異なる通貨交換からの価格データの更新を受け取るアプリケーションを構築しています。今私は最も効率的なコンテナを選択する必要があります。コンテナは、型Entryの要素を使用します。注文表記のためのSTLコンテナはどれですか?

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::listallows 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

関連する問題