(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
template<class...Args> iterator emplace_hint( const_iterator hint, Args&&...args); | (since C++23) (constexpr since C++26) | |
Inserts a new element into the container as close as possible to the position just beforehint.
The constructor ofvalue_type (i.e.,std::pair<const Key, T>) is called with exactly the same arguments as supplied to the function, forwarded withstd::forward<Args>(args)....
| Information on iterator invalidation is copied fromhere |
Contents |
| hint | - | iterator to the position before which the new element will be inserted |
| args | - | arguments to forward to the constructor of the element |
An iterator to the inserted element, or to the element that prevented the insertion.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
| This section is incomplete |
#include <chrono>#include <cstddef>#include <functional>#include <iomanip>#include <iostream>#include <flat_map> constint n_operations=100'500'0; std::size_t map_emplace(){std::flat_map<int,char> map;for(int i=0; i< n_operations;++i) map.emplace(i,'a');return map.size();} std::size_t map_emplace_hint(){std::flat_map<int,char> map;auto it= map.begin();for(int i=0; i< n_operations;++i){ map.emplace_hint(it, i,'b'); it= map.end();}return map.size();} std::size_t map_emplace_hint_wrong(){std::flat_map<int,char> map;auto it= map.begin();for(int i= n_operations; i>0;--i){ map.emplace_hint(it, i,'c'); it= map.end();}return map.size();} std::size_t map_emplace_hint_corrected(){std::flat_map<int,char> map;auto it= map.begin();for(int i= n_operations; i>0;--i){ map.emplace_hint(it, i,'d'); it= map.begin();}return map.size();} std::size_t map_emplace_hint_closest(){std::flat_map<int,char> map;auto it= map.begin();for(int i=0; i< n_operations;++i) it= map.emplace_hint(it, i,'e');return map.size();} double time_it(std::function<std::size_t()> map_test,std::string what="",double ratio=0.0){constauto start=std::chrono::system_clock::now();conststd::size_t map_size= map_test();constauto stop=std::chrono::system_clock::now();std::chrono::duration<double,std::milli> time= stop- start;if(what.size()&& map_size)std::cout<<std::setw(8)<< time<<" for "<< what<<" (ratio: "<<(ratio==0.0?1.0: ratio/ time.count())<<")\n";return time.count();} int main(){std::cout<<std::fixed<<std::setprecision(2); time_it(map_emplace);// cache warmupconstauto x= time_it(map_emplace,"plain emplace"); time_it(map_emplace_hint,"emplace with correct hint", x); time_it(map_emplace_hint_wrong,"emplace with wrong hint", x); time_it(map_emplace_hint_corrected,"corrected emplace", x); time_it(map_emplace_hint_closest,"emplace using returned iterator", x);}
Possible output:
...TODO...
| constructs element in-place (public member function)[edit] | |
| inserts elements (public member function)[edit] |