2011-11-11 13 views
2

ETSセットは、タプルの内部順序が挿入された順序と同じであることを保証しますか?たとえば、毎秒タプルを挿入してログを保持し、タイムスタンプがキーです。この例では、タプルがキーによってソートされることを保証するかどうかを設定しますか?ETSセット保存順序?

私はordered_setが私の望んだことをすると理解していますが、挿入オーバーヘッドがあります。ですから、もしsetが挿入順序を保持していれば、私の例ではsetを使う方がはるかに効率的です。そうですか?ある場合は特に - ETS setは、それが将来的にそうし続けるだろうという保証はありません、今日のあなたの仮定を満たしない場合でも、事前に:-)

おかげで、 ニコラ

答えて

4

いいえ、テーブルタイプがsetの場合、どのような順序でキーがソートされるかは保証されていません。それらはハッシュされ、ハッシュ値は要素をテーブルに入れるために使用されます。テーブルは時々サイズが変更され、頼りになるので順序が変わります。そうですね、あなたはただ運が良かっただけです。

+0

したがって、それらはハッシュによってソートされます。クール、ありがとう。 – dijxtra

+0

@dijxtra: 'set'と' bag'はハッシュされ、 'ordered_set'はソートされたバイナリツリーです。 – rvirding

+0

私は疑問に思っています...あなたが順序付けられたインデックスをキーで比較する必要があるなら、あなたはO(lg n)最悪の時間よりも速くできますか?もちろん、あなたはインサートを償却し、抽出することができます(例えば、ペアのヒープのように) - しかし、まだ... –

1

必要な正確なプロパティを持つordered_setがあります。

関連する問題