Standart konteynerlerin karmaşıklık garantileri nelerdir?


160

Görünüşe göre ;-) standart kaplar bir çeşit garanti sağlar.

Ne tür garantiler ve farklı konteyner türleri arasındaki farklar tam olarak nedir?

SGI sayfasından çalışarak ( STL hakkında ) bununla geldim:

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)

Buradan başlayın: STL Karmaşıklık Özellikleri . Ardından, o sitedeki tüm kap türlerini okuyun ve belirtilen karmaşıklık gereksinimlerine bakın. Bu yardımcı olur umarım!
Chris Jester-Young

1
Sınıfımda okumak için çalışmanızın bir kopyasını alabilir miyim?
Dzung Nguyen

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

1
@MartinYork Bu bağlantı artık öldü.
Chani

Yanıtlar:


72

Güzel kaynak Standart C ++ Kapsayıcılar buldum . Muhtemelen hepiniz aradığınız budur.

VEKTÖR

Kurucular

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)

Erişimciler

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)

Düzenleyiciler

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)

Diğer kaplar için sayfaya bakınız.


6

Hepsini bir bakışta karşılaştırmanızı sağlayan tek bir tablo gibi bir şeyin farkında değilim (böyle bir tablonun bile mümkün olacağından emin değilim).

Elbette ISO standart belgesi, karmaşıklık gerekliliklerini, bazen oldukça okunabilir çeşitli tablolarda, diğer zamanlarda, her bir özel yöntem için daha az okunabilir mermi noktalarında ayrıntılı olarak numaralandırmaktadır.

Ayrıca, http://www.cplusplus.com/reference/stl/ adresindeki STL kitaplığı referansı, uygun olduğunda karmaşıklık gereksinimlerini sağlar.


0

Bu github sayfasında başka bir hızlı arama tablosu var

Not: Bu, unordered_map vb.Gibi tüm kapları dikkate almaz, ancak yine de bakmak harika. Bu sadece bir temizleyici versiyonudur bu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.