std::set::insert
std::pair<iterator,bool> insert( const value_type& value ); |
(1) | |
std::pair<iterator,bool> insert( value_type&& value ); |
(2) | (od C++11) |
| (3) | ||
iterator insert( iterator hint, const value_type& value ); |
(do C++11) | |
iterator insert( const_iterator hint, const value_type& value ); |
(od C++11) | |
iterator insert( const_iterator hint, value_type&& value ); |
(4) | (od C++11) |
template< class InputIt > void insert( InputIt first, InputIt last ); |
(5) | |
void insert( std::initializer_list<value_type> ilist ); |
(6) | (od C++11) |
Wstawia elemet(y) do kontenera, o ile nie zawiera on już wcześniej elementów o identycznym kluczu.
Żadne iteratory ani referencje nie zostają unieważnione.
Parametry
| hint | - |
| ||||
| value | - | element value do wstawienia | ||||
| first, last | - | przedział elementów do wstawienia | ||||
| ilist | - | lista inicjalizacyjna, z której zostaną wstawione wartości | ||||
| Wymagania względem typów | ||||||
| -InputIt musi spełniać wymagania InputIterator. | ||||||
Zwracana wartość
bool ustawionej na true, jeśli wstawienie rzeczywiście nastąpiło.
Wyjątki
| Ta sekcja jest niedokończona.
Powód: przypadki 5-6 |
Złożoność
|
3-4) Amortyzowana stała, o ile wstawienie następuje na pozycji bezpośrednio za wskazówką hint, w przeciwnym wypadku logarytmiczna względem rozmiaru kontenera.
|
(do C++11) |
|
3-4) Amortyzowana stała, o ile wstawienie następuje na pozycji bezpośrednio przed wskazówką hint, w przeciwnym wypadku logarytmiczna względem rozmiaru kontenera.
|
(od C++11) |
Notka
Przeciążenia wstawiające z podpowiedzią (3,4) nie zwracają bool-a aby mieć zgodną sygnaturę ze wstawieniami pozycyjnymi do kontenerów sekwencyjnych, takimi jak std::vector::insert. Pozwala to na stworzenie uogólnionych inserterów, takich jak std::inserter. Jedną z metod sprawdzenia sukcesu operacji jest porównanie wartości size() przed i po wywołaniu tej metody.
Przeciążenia (5,6) są często implementowane jako pętla wywołująca przeciążenie (3) z end() jako wskazówką; są zoptymalizowane do dostawiania na koniec kontenera posortowanych sekwencji (takich jak inny set), których najmniejszy element jest większy niż największy element *this
Przykład
#include <set>
#include <cassert>
#include <iostream>
int main()
{
std::set<int> set;
auto result_1 = set.insert(3);
assert(result_1.first != set.end()); // it's a valid iterator
assert(*result_1.first == 3);
if (result_1.second)
std::cout << "insert done\n";
auto result_2 = set.insert(3);
assert(result_2.first == result_1.first); // same iterator
assert(*result_2.first == 3);
if (!result_2.second)
std::cout << "no insertion\n";
}
Wynik:
insert done
no insertion
Zobacz także
(C++11) |
konstruuje element "w miejscu" (publiczna metoda) |
(C++11) |
tworzy elementy "w miejscu", korzystając z podpowiedzi (publiczna metoda) |