Ответ 1
Начните здесь: Спецификации сложности STL. Затем прочитайте все типы контейнеров на этом сайте и посмотрите требования к сложности.
Надеюсь, это поможет!
По-видимому ;-) стандартные контейнеры предоставляют определенные гарантии.
Какие гарантии и какие именно различия между различными типами контейнеров?
Работая со страницы 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. Затем прочитайте все типы контейнеров на этом сайте и посмотрите требования к сложности.
Надеюсь, это поможет!
Я нашел хороший ресурс Стандартные контейнеры С++. Возможно, это то, что вы все ищете.
ВЕКТОР
Конструкторы
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)
Accessors
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)
Для других контейнеров обратитесь к странице.
Хорошее резюме операций STL представлено на странице Стандартные контейнеры С++.
Я не знаю ничего, как отдельная таблица, позволяющая сравнить их все с одного взгляда (я не уверен, что такая таблица будет даже возможна).
Конечно, в стандартном документе ISO подробно перечислены требования к сложности, иногда в разных довольно читаемых таблицах, иногда в менее читаемых маркерах для каждого конкретного метода.
Также ссылка на библиотеку STL в http://www.cplusplus.com/reference/stl/ предоставляет необходимые требования к сложности.