std::multimap::insert(3)
π std::multimap::insert(3) π
okay so bestie, this is the std::multimap::insert page from the C++ Standard Libary man pages, section 3 β yes, that's how the header spells it, and we love her anyway π
. It's literally all about putting elements into your multimap, and there are ten overloads, so grab a lil snack π and let's go.
π NAME π
std::multimap::insert β it's giving std::multimap::insert, because that's literally the name. no cap.
β¨ Synopsis β¨
iterator insert( const value_type& value ); (1)
iterator insert( value_type&& value ); (2) (since C++17)
template< class P > (3) (since C++11)
iterator insert( P&& value );
iterator insert( iterator pos, const value_type& (4) (until C++11)
value );
iterator insert( const_iterator pos, const (4) (since C++11)
value_type& value );
iterator insert( const_iterator pos, value_type&& (5) (since C++17)
value );
template< class P > (6) (since C++11)
iterator insert( const_iterator pos, P&& value );
template< class InputIt > (7)
void insert( InputIt first, InputIt last );
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. iconic behavior, honestly.
1-3) Inserts value. If the container already has elements with equivalent key, it inserts at the upper bound of that range.
Overload (3) is equivalent to emplace(std::forward<P>(value)) and only participates in overload resolution if std::is_constructible<value_type, P&&>::value == true.
4-6) Inserts value in the position as close as possible to the position just prior to pos.
Overload (6) is equivalent to emplace_hint(hint, std::forward<P>(value)) and only participates in overload resolution if std::is_constructible<value_type, P&&>::value == true.
7) Inserts elements from the range [first, last).
8) Inserts elements from the initializer list ilist.
9) If nh is an empty node handle, it does nothing. Otherwise, it inserts the element owned by nh into the container and returns an iterator pointing at the inserted element. If a range containing elements with keys equivalent to nh.key() exists in the container, the element is inserted at the end of that range.
π¨ the behavior is undefined ifnhis not empty andget_allocator() != nh.get_allocator().
10) If nh is an empty node handle, it does nothing and returns the end iterator. Otherwise, it inserts the element owned by nh into the container, and returns the iterator pointing to the element with key equivalent to nh.key(). The element is inserted as close as possible to the position just prior to pos.
π¨ same warning, bestie: the behavior is undefined ifnhis not empty andget_allocator() != nh.get_allocator().
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)
πΈ Parameters πΈ
posβ iterator to the position before which the new element will be insertedvalueβ element value to insertfirst,lastβ range of elements to insertilistβ initializer list to insert the values fromnhβ a compatible node handle
π§ Type requirements π§
InputItmust meet the requirements ofLegacyInputIterator.
π Return value π
- 1-6) An iterator to the inserted element.
- 7, 8) none.
- 9, 10) End iterator if
nhwas empty, iterator pointing to the inserted element otherwise.
π Exceptions π
- 1-6) If an exception is thrown by any operation, the insertion has no effect.
- 7, 8) No exception safety guarantee.
- 9, 10) If an exception is thrown by any operation, the insertion has no effect.
π₯ Complexity π₯
- 1-3)
O(log(size())) - 4-6) Amortized constant if the insertion happens in the position just before
pos,O(log(size()))otherwise. - 7, 8)
O(NΒ·log(size() + N)), whereNis the number of elements to insert. - 9)
O(log(size())) - 10) Amortized constant if the insertion happens in the position just before
pos,O(log(size()))otherwise.
π Example π
// Run this code
#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,Γ€}
π¦ Defect reports π¦
The following behavior-changing defect reports were applied retroactively to previously published C++ standards. history really said "let me fix her" π
- LWG 233 β applied to C++98. Behavior as published:
poswas just a hint, it could be totally ignored. Correct behavior: the insertion is required to be as close as possible to the position just prior topos. - LWG 264 β applied to C++98. Behavior as published: the complexity of overload (5) was required to be linear if the range
[first, last)is sorted according toCompare. Correct behavior: removed the linear requirement in this special case. - LWG 371 β applied to C++98. Behavior as published: the order of equivalent elements was not guaranteed to be preserved. Correct behavior: required to be preserved.
- LWG 2005 β applied to C++11. Behavior as published: overloads (3,6) were poorly described. Correct behavior: improved the description.
π See also π
emplaceβ constructs element in-place(C++11)(public member function)emplace_hintβ constructs elements in-place using a hint(C++11)(public member function)inserterβ creates astd::insert_iteratorof type inferred from the argument (function template)
mwah π this page came from http://cppreference.com, version 2024.06.10, and it's the std::multimap::insert(3) page β bye bestie, go insert something iconic π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms