タスクに最適なデータ構造を決定する際には、次の 3 つの考慮事項があります。
- 機能性: データ構造は必要な操作を提供しますか?
- パフォーマンス: これらの操作の速度
- メモリ消費量: データ構造が使用するメモリ量
最初の考慮事項は、データ構造のインターフェイスをチェックすることで見つけることができます。2 番目の考慮事項は、ベンチマークでのみ測定できます。ただし、データ構造が現在使用しているメモリを計算するメソッドを提供するだけの場合、3 つ目は非常に単純ですが、それ以外の場合は困難です。
STL データ構造では、このような方法はありません。しかし、なぜ?STL のすべてのデータ構造に対してこのようなメソッドを実装するのは非常に簡単です。クライアントである私にとって、内部実装に精通している必要があるため、このようなメソッドを作成するのは非常に困難です。さらに、実装はプライベート メンバーの背後に隠されているため、まったくアクセスできません。
では、なぜ彼らは除外されたのでしょうか。現在、データ構造を選択する場合、現在リリースされている google btree 実装など、他の多くの実装がこれらのメソッドを提供しています。これらのデータ構造を比較するのは簡単です。ただし、メモリ消費に関して STL データ構造がどのように機能するかを尋ねるとき、私ができることは基本的に推測することだけです。
これらのメソッドを除外することが設計上の決定になる可能性がある理由を見つけることができません。さらに、C++ は、高いパフォーマンスと低いメモリ フットプリントを実現するように調整された言語です。特にそのような言語では、データ構造のメモリ消費量を評価することは非常に一般的なユースケースだと思います。ですから、誰も使わないから取り残されたとも思えません。さらに、STL は非常に成熟したライブラリでもあるため、その理由は、ライブラリがこれに対して十分に精巧ではないということでもありません。では、これらのメソッドを省略する理由は何でしょうか?