Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::flat_m...emplace_hint(3) C++ Standard Libarystd::flat_m...emplace_hint(3)

NAME
       std::flat_map::emplace_hint - std::flat_map::emplace_hint

Synopsis
	  template<		   class...		  Args		     >
       (since C++23)
	  iterator emplace_hint( const_iterator	hint, Args&&...	args );

	  Inserts a new	element	into the container as close as possible	to the
       position	just
	  before hint.

	  The  constructor  of	the  element  type   (value_type,   that   is,
       std::pair<const Key, T>)
	  is  called  with exactly the same arguments as supplied to the func-
       tion, forwarded
	  with std::forward<Args>(args)....

	   Information on iterator invalidation	is copied from here

Parameters
	  hint - iterator to the position before which the new element will be
       inserted
	  args - arguments to forward to the constructor of the	element

Return value
	  An iterator to the inserted element, or to  the  element  that  pre-
       vented the insertion.

Exceptions
	  If  an  exception is thrown for any reason, this function has	no ef-
       fect (strong
	  exception safety guarantee).

Complexity
	   This	section	is incomplete

Example
       // Run this code

	#include <chrono>
	#include <cstddef>
	#include <functional>
	#include <iomanip>
	#include <iostream>
	#include <flat_map>

	const int 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)
	{
	    const auto start = std::chrono::system_clock::now();
	    const std::size_t map_size = map_test();
	    const auto 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 <<	" (ra-
       tio: "
			  << (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 warmup
	    const auto 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	itera-
       tor", x);
	}

Possible output:
	...TODO...

See also
	  emplace constructs element in-place
		  (public member function)
	  insert  inserts elements
		  (public member function)

Category:
	    * Todo without reason

http://cppreference.com		  2024.06.10	 std::flat_m...emplace_hint(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::flat_map::emplace_hint&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help