標準コンテナの複雑さの保証は何ですか?


160

どうやら;-)標準コンテナは何らかの形の保証を提供します。

どのタイプの保証があり、正確には、異なるタイプのコンテナの違いは何ですか?

SGIページから作業(STLについて)私はこれを思いつきました:

Container Types:
================
Container:
    Forward Container
        Reverse Container
            Random Access Container
    Sequence
        Front Insert Sequence
        Back  Insert Sequence
    Associative Container
        Simple   Associative Container
        Pair     Associative Container
        Sorted   Associative Container
        Multiple Associative Container

Container Types mapped to Standard Containers
=============================================

std::vector:    Sequence    Back        Sequence                    Forward/Reverse/Random Container
std::deque:     Sequence    Front/Back  Sequence                    Forward/Reverse/Random Container
std::list:      Sequence    Front/Back  Sequence                    Forward/Reverse Container
std::set:       Sorted/Simple/Unique    Associative Container       Forward Container
std::map:       Sorted/Pair/Unique      Associative Container       Forward Container
std::multiset:  Sorted/Simple/Multiple  Associative Container       Forward Container
std::multimap:  Sorted/Pair/Multiple    Associative Container       Forward Container


Container Guarantees:
=====================

                                                                                  Simp
                                                                                  or
                          For   Rev  Rand        Front  Back  Assoc        Sort   Mult
                    Cont: Cont: Cont Cont: Sequ: Sequ:  Sequ: Cont:        Cont:  Cont:
Copy    Const:      O(n)
Fill    Const:                             O(n)
begin()             O(1)
end()               O(1)
rbegin()                        O(1)
rend()                          O(1)
front()                                    O(1)
push_front()                                     O(1)
pop_front()                                      O(1)
push_back()                                             O(1)
pop_back()                                              O(1)
Insert()                                                                          O(ln(n))
Insert: fill                               O(n)
Insert: range                              O(n)                                   O(kln(n)+n)
size()              O(n)
swap()              O(1)
erase key                                                     O(ln(n))
erase element                                                 O(1)
erase range                                                   O(ln(n)+S)
count()                                                       O(log(n)+k)
find()                                                        O(ln(n))
equal range                                                   O(ln(n))
Lower Bound/Upper Bound                                                    O(ln(n))
Equality                  O(n)
InEquality                O(n)
Element Access                       O(1)

ここから開始:STL複雑度の仕様。次に、そのサイトのすべてのコンテナータイプを読み、記載されている複雑さの要件を確認します。お役に立てれば!
Chris Jester-Young、

1
私のクラスで勉強するためにあなたの作品のコピーをもらえますか?
Dzung Nguyen、

1
@nXqd:www.sgi.com/tech/stlを参照
マーティンヨーク

1
@MartinYorkそのリンクは現在死んでいます。
チャニー2018年

2
john-ahlgren.blogspot.com/2013/10/…ここをご覧ください:)
Shalomi11

回答:


72

私は素晴らしいリソースStandard C ++ Containersを見つけました。たぶん、これがあなたが探しているものでしょう。

ベクター

コンストラクタ

vector<T> v;              Make an empty vector.                                     O(1)
vector<T> v(n);           Make a vector with N elements.                            O(n)
vector<T> v(n, value);    Make a vector with N elements, initialized to value.      O(n)
vector<T> v(begin, end);  Make a vector and copy the elements from begin to end.    O(n)

アクセサ

v[i]          Return (or set) the I'th element.                        O(1)
v.at(i)       Return (or set) the I'th element, with bounds checking.  O(1)
v.size()      Return current number of elements.                       O(1)
v.empty()     Return true if vector is empty.                          O(1)
v.begin()     Return random access iterator to start.                  O(1)
v.end()       Return random access iterator to end.                    O(1)
v.front()     Return the first element.                                O(1)
v.back()      Return the last element.                                 O(1)
v.capacity()  Return maximum number of elements.                       O(1)

修飾子

v.push_back(value)         Add value to end.                                                O(1) (amortized)
v.insert(iterator, value)  Insert value at the position indexed by iterator.                O(n)
v.pop_back()               Remove value from end.                                           O(1)
v.assign(begin, end)       Clear the container and copy in the elements from begin to end.  O(n)
v.erase(iterator)          Erase value indexed by iterator.                                 O(n)
v.erase(begin, end)        Erase the elements from begin to end.                            O(n)

その他のコンテナはこちらのページをご覧ください。


6

一目ですべてを比較できる単一のテーブルのようなものは何も知りません(そのようなテーブルが実現可能かどうかはわかりません)。

もちろん、ISO標準文書は複雑さの要件を詳細に列挙し、場合によっては読みやすいさまざまな表で示したり、特定の方法ごとに読みにくい箇条書きで列挙したりします。

また、http: //www.cplusplus.com/reference/stl/にあるSTLライブラリリファレンスには、必要に応じて複雑さの要件が記載されています。


0

別のクイックルックアップテーブルは、このgithubページで入手できます

注:これは、unordered_mapなどのすべてのコンテナを考慮しているわけではありませんが、それでも注目に値します。それはちょうどのクリーナーバージョンです。この

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.