Apa jaminan kompleksitas dari kontainer standar?


160

Rupanya ;-) kontainer standar memberikan beberapa bentuk jaminan.

Apa jenis jaminan dan apa sebenarnya perbedaan antara berbagai jenis wadah?

Bekerja dari halaman SGI (tentang STL ) saya telah menemukan ini:

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)

Mulai di sini: Spesifikasi Kompleksitas STL . Kemudian bacalah semua jenis kontainer di situs itu, dan lihat persyaratan kerumitan yang disebutkan. Semoga ini membantu!
Chris Jester-Young

1
Bisakah saya memiliki salinan pekerjaan Anda untuk belajar di kelas saya?
Dzung Nguyen

1
@nXqd: lihat www.sgi.com/tech/stl
Martin York

1
@MartinYork Tautan itu sekarang mati.
Chani

Jawaban:


72

Saya menemukan sumber yang bagus, Standard C ++ Containers . Mungkin ini yang Anda semua cari.

VEKTOR

Konstruktor

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)

Pengakses

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)

Pengubah

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)

Untuk wadah lain, lihat halaman.


6

Saya tidak mengetahui hal-hal seperti tabel tunggal yang memungkinkan Anda membandingkan semuanya dalam satu pandangan (saya tidak yakin meja seperti itu bahkan akan layak).

Tentu saja dokumen standar ISO menyebutkan persyaratan kompleksitas secara terperinci, kadang-kadang dalam berbagai tabel yang agak mudah dibaca, kali lain dalam poin-poin yang kurang dapat dibaca untuk setiap metode tertentu.

Juga referensi pustaka STL di http://www.cplusplus.com/reference/stl/ menyediakan persyaratan kompleksitas yang sesuai.


0

Tabel pencarian cepat lainnya tersedia di halaman github ini

Catatan: Ini tidak mempertimbangkan semua kontainer seperti, unordered_map dll. Tetapi masih bagus untuk dilihat. Ini hanya versi yang lebih bersih dari ini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.