std::multimap<Key,T,Compare,Allocator>::insert
| iterator insert( const value_type& value ); |
(1) | |
| iterator insert( value_type&& value ); |
(2) | (since C++17) |
| template< class P > iterator insert( P&& value ); |
(3) | (since C++11) |
| (4) | ||
iterator insert( iterator pos, const value_type& value ); |
(until C++11) | |
| iterator insert( const_iterator pos, const value_type& value ); |
(since C++11) | |
| iterator insert( const_iterator pos, value_type&& value ); |
(5) | (since C++17) |
| template< class P > iterator insert( const_iterator pos, P&& value ); |
(6) | (since C++11) |
| template< class InputIt > void insert( InputIt first, InputIt last ); |
(7) | |
| void insert( std::initializer_list<value_type> ilist ); |
(8) | (since C++11) |
| iterator insert( node_type&& nh ); |
(9) | (since C++17) |
| iterator insert( const_iterator pos, node_type&& nh ); |
(10) | (since C++17) |
Inserts element(s) into the container.
[first, last).No iterators or references are invalidated. If the insertion is successful, pointers and references to the element obtained while it is held in the node handle are invalidated, and pointers and references obtained to that element before it was extracted become valid.(since C++17)
Contents |
[edit] Parameters
| pos | - | iterator to the position before which the new element will be inserted |
| value | - | element value to insert |
| first, last | - | range of elements to insert |
| ilist | - | initializer list to insert the values from |
| nh | - | a compatible node handle |
| Type requirements | ||
-InputIt must meet the requirements of LegacyInputIterator.
| ||
[edit] Return value
[edit] Exceptions
[edit] Complexity
O(log(size()))O(log(size())) otherwise.O(N·log(size() + N)), where N is the number of elements to insert.O(log(size()))O(log(size())) otherwise.[edit] Example
#include <functional> #include <iostream> #include <map> #include <string> #include <string_view> #include <utility> template<class M> void print(const std::string_view rem, const M& mmap) { std::cout << rem << ' '; for (const auto& e : mmap) std::cout << '{' << e.first << ',' << e.second << "} "; std::cout << '\n'; } int main() { // list-initialize std::multimap<int, std::string, std::greater<int>> mmap {{2, "foo"}, {2, "bar"}, {3, "baz"}, {1, "abc"}, {5, "def"}}; print("#1", mmap); // insert using value_type mmap.insert(decltype(mmap)::value_type(5, "pqr")); print("#2", mmap); // insert using pair mmap.insert(std::pair{6, "uvw"}); print("#3", mmap); mmap.insert({7, "xyz"}); print("#4", mmap); // insert using initializer_list mmap.insert({{5, "one"}, {5, "two"}}); print("#5", mmap); // insert using a pair of iterators mmap.clear(); const auto il = {std::pair{1, "ä"}, {2, "ё"}, {2, "ö"}, {3, "ü"}}; mmap.insert(il.begin(), il.end()); print("#6", mmap); }
Output:
#1 {5,def} {3,baz} {2,foo} {2,bar} {1,abc}
#2 {5,def} {5,pqr} {3,baz} {2,foo} {2,bar} {1,abc}
#3 {6,uvw} {5,def} {5,pqr} {3,baz} {2,foo} {2,bar} {1,abc}
#4 {7,xyz} {6,uvw} {5,def} {5,pqr} {3,baz} {2,foo} {2,bar} {1,abc}
#5 {7,xyz} {6,uvw} {5,def} {5,pqr} {5,one} {5,two} {3,baz} {2,foo} {2,bar} {1,abc}
#6 {3,ü} {2,ё} {2,ö} {1,ä}[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 233 | C++98 | pos was just a hint, it could be totally ignored | the insertion is required to be as close as possible to the position just prior to pos |
| LWG 264 | C++98 | the complexity of overload (5) was required to be linear if the range [first, last) is sorted according to Compare
|
removed the linear requirement in this special case |
| LWG 371 | C++98 | the order of equivalent elements was not guaranteed to be preserved |
required to be preserved |
| LWG 2005 | C++11 | overloads (3,6) were poorly described | improved the description |
[edit] See also
| (C++11) |
constructs element in-place (public member function) |
| (C++11) |
constructs elements in-place using a hint (public member function) |
| creates a std::insert_iterator of type inferred from the argument (function template) |

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
