2008-09-17 15 views
4

std :: setやstd :: mapなどのデータ型で、ルックアップが対数的に発生する場合は、イテレータの開始と終了を維持するために必要な実装ですか?アクセスの開始と終了は、対数時間に発生する可能性のあるルックアップを意味しますか?C++はstd :: set、std :: mapなどのために一定時間内にbegin/end/rbegin/rendを実行しますか?

私はいつも始まりと終わりが常に一定の時間内に起きると考えていましたが、私はこれをジョスティスで確認することはできません。私がパフォーマンスについて肛門をする必要がある何かに取り組んでいるので、私は自分の基盤をカバーしたいと思っています。

おかげ

答えて

7

をチェック即時の時間。 ;)(コンテナRequiments

a.begin -

表65:2003標準:私は、ISO/IEC 14882のページ466で探しています(一定の複雑さ)

a.end(); (一定の複雑さ)

表66 - リバーシブルコンテナ要件

a.rbegin()。 (一定の複雑さ)

a.rend(); (一定の複雑さ)

4

C++標準では、23.1(コンテナの要件)の表65に、begin()とend()に一定時間が必要であると記載されています。実装がこれに違反している場合、それは準拠していません。

1

ちょうどあなたがSTDでイテレータを見ることができ、ここで、コードを見て::

std::map

のlibstdC++ GNUのマップあなたは...すべての実装されているすべてのエンドレンドのCENDことがわかります一定の時間内に。

が始まるのstd ::設定については

+0

ありがとう、それは将来の役に立つリソースです。 –

0

:定数、エンド:定数、 rbegin:定数、 レンド:定数、のstd ::マップの

それらはすべて(も一定でありますそれらの)

あなたは何の疑いがある場合は、ちょうど彼らが共同で起こるwww.cplusplus.com

+1

cplusplus.comにあまり依存しないでください – Jagannath

1

ただし、hash_mapには注意してください。 begin()は定数ではありません。

関連する問題