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

FreeBSD Manual Pages

  
 
  

home | help
std::set::set(3)	      C++ Standard Libary	      std::set::set(3)

NAME
       std::set::set - std::set::set

Synopsis
	  set();

	  explicit set(	const Compare& comp,

	  const	Allocator& alloc = Allocator() );
	  explicit set(	const Allocator& alloc );		   (1) (since
								       C++11)
	  template< class InputIt >

	  set( InputIt first, InputIt last,
	  const	Compare& comp =	Compare(),

	  const	Allocator& alloc = Allocator() );
	  template< class InputIt >

	  set(	  InputIt    first,    InputIt	  last,	   const    Allocator&
       (since
	  alloc)
       C++14)

	  : set(first, last, Compare(),	alloc) {}
	  set( const set& other	);				       (3)
	  set( const set& other, const Allocator&  alloc  );	      (2)  (3)
       (since
									       C++11)
	  set(	set&&  other  );					   (4)
       (since
									       C++11)
	  set( set&& other, const  Allocator&  alloc  );		   (4)
       (since
									       C++11)
	  set( std::initializer_list<value_type> init,
										       (since
	  const		 Compare&	   comp		 =	    Compare(),
       C++11)
								       (5)
	  const	Allocator& alloc = Allocator() );
	  set(	     std::initializer_list<value_type>	     init,	 const
       (since
	  Allocator&			      alloc			     )
       C++14)
	  : set(init, Compare(), alloc)	{}

	  Constructs new container from	a variety of data sources and  option-
       ally using user
	  supplied allocator alloc or comparison function object comp.

	  1) Default constructor. Constructs empty container.
	  2)  Range constructor. Constructs the	container with the contents of
       the range
	  [first, last). If multiple elements in the range have	keys that com-
       pare equivalent,
	  it is	unspecified which element is inserted (pending LWG2844).
	  3) Copy constructor. Constructs the container	with the copy  of  the
       contents	of
	  other.

	  If   alloc  is  not  provided,  allocator  is	 obtained  by  calling
       (since
	  std::allocator_traits<allocator_type>::select_on_container_copy_con-
       struction( C++11)
	  other.get_allocator()).
	  The template parameter Allocator is only deduced from	the first  ar-
       gument	   (since
	  while	    used     in	   class    template	argument    deduction.
       C++23)

	  4) Move constructor. Constructs the container	with the  contents  of
       other using move
	  semantics.  If alloc is not provided,	allocator is obtained by move-
       construction from
	  the allocator	belonging to other.

	  The template parameter Allocator is  only  deduced  from  the	 first
       (since C++23)
	  argument while used in class template	argument deduction.

	  5)  Initializer-list	constructor. Constructs	the container with the
       contents	of the
	  initializer list init. If multiple elements in the range  have  keys
       that compare
	  equivalent,  it  is  unspecified  which element is inserted (pending
       LWG2844).

Parameters
	  alloc	      -	allocator to use for all memory	 allocations  of  this
       container
	  comp	       - comparison function object to use for all comparisons
       of keys
	  first, last -	the range to copy the elements from
	  other	      -	another	container to be	used as	source	to  initialize
       the elements of
			the container with
	  init	       -  initializer  list  to	initialize the elements	of the
       container with

Type requirements
	  -
	  InputIt must meet the	requirements of	LegacyInputIterator.
	  -
	  Compare must meet the	requirements of	Compare.
	  -
	  Allocator must meet the requirements of Allocator.

Complexity
	  1) Constant
	  2) N log(N) where N =	std::distance(first, last) in general,	linear
       in N if the
	  range	is already sorted by value_comp().
	  3) Linear in size of other
	  4)  Constant.	 If alloc is given and alloc !=	other.get_allocator(),
       then linear.
	  5) N log(N) where N =	init.size() in general,	linear in N if init is
       already sorted
	  by value_comp().

Exceptions
	  Calls	to Allocator::allocate may throw.

Notes
	  After	container move construction (overload (4)), references,	point-
       ers, and
	  iterators (other than	the end	iterator) to other remain  valid,  but
       refer to	elements
	  that are now in *this. The current standard makes this guarantee via
       the blanket
	  statement  in	[container.requirements.general]/12, and a more	direct
       guarantee is
	  under	consideration via LWG 2321.

	  Although not formally	required until C++23, some implementations has
       already put the
	  template parameter Allocator into non-deduced	 contexts  in  earlier
       modes.

Example
       // Run this code

	#include <iostream>
	#include <string>
	#include <set>
	#include <cmath>

	struct Point { double x, y; };
	struct PointCmp	{
	    bool operator()(const Point& lhs, const Point& rhs)	const {
		return std::hypot(lhs.x, lhs.y)	< std::hypot(rhs.x, rhs.y);
	    }
	};

	int main()
	{
	  // (1) Default constructor
	  std::set<std::string>	a;
	  a.insert("cat");
	  a.insert("dog");
	  a.insert("horse");
	  for(auto& str: a) std::cout << str <<	' ';
	  std::cout << '\n';

	  // (2) Iterator constructor
	  std::set<std::string>	b(a.find("dog"), a.end());
	  for(auto& str: b) std::cout << str <<	' ';
	  std::cout << '\n';

	  // (3) Copy constructor
	  std::set<std::string>	c(a);
	  c.insert("another horse");
	  for(auto& str: c) std::cout << str <<	' ';
	  std::cout << '\n';

	  // (4) Move constructor
	  std::set<std::string>	d(std::move(a));
	  for(auto& str: d) std::cout << str <<	' ';
	  std::cout << '\n';
	  std::cout << "moved-from set is ";
	  for(auto& str: a) std::cout << str <<	' ';
	  std::cout << '\n';

	  // (5) Initializer list constructor
	  std::set<std::string>	e {"one", "two", "three", "five", "eight"};
	  for(auto& str: e) std::cout << str <<	' ';
	  std::cout << '\n';

	  // custom comparison
	  std::set<Point, PointCmp> z =	{{2, 5}, {3, 4}, {1, 1}};
	  z.insert({1,	-1});  //  this	 fails	because	 the magnitude of 1,-1
       equals 1,1
	  for(auto& p: z) std::cout << '(' << p.x << ',' << p.y	<< ") ";
	  std::cout << '\n';
	}

Output:
	cat dog	horse
	dog horse
	another	horse cat dog horse
	cat dog	horse
	moved-from set is
	eight five one three two
	(1,1) (3,4) (2,5)

	 Defect	reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	   Applied to	     Behavior as published	  Correct  be-
       havior
	  LWG 2193 C++11      the default constructor is explicit made non-ex-
       plicit

See also
	  operator= assigns values to the container
		    (public member function)

http://cppreference.com		  2022.07.31		      std::set::set(3)

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

home | help