1.. Sequences/Classes//set |40 2 3set 4=== 5 6Description 7----------- 8 9``set`` is a |variadic|, `associative`__, `extensible`__ sequence of types that 10supports constant-time insertion and removal of elements, and testing for membership. 11A ``set`` may contain at most one element for each key. 12 13__ `Associative Sequence`_ 14__ `Extensible Associative Sequence`_ 15 16Header 17------ 18 19+-------------------+-------------------------------------------------------+ 20| Sequence form | Header | 21+===================+=======================================================+ 22| Variadic | ``#include <boost/mpl/set.hpp>`` | 23+-------------------+-------------------------------------------------------+ 24| Numbered | ``#include <boost/mpl/set/set``\ *n*\ ``.hpp>`` | 25+-------------------+-------------------------------------------------------+ 26 27 28Model of 29-------- 30 31* |Variadic Sequence| 32* |Associative Sequence| 33* |Extensible Associative Sequence| 34 35 36Expression semantics 37-------------------- 38 39In the following table, ``s`` is an instance of ``set``, ``pos`` is an iterator into ``s``, 40and ``x``, ``k``, and |t1...tn| is a set of *unique* arbitrary types. [*Note:* See `below`__ for 41an example of how to construct a ``set`` from a list of potentially non-unique types |--| *end note*\] 42 43__ nonunique-set-example_ 44 45+---------------------------------------+-----------------------------------------------------------+ 46| Expression | Semantics | 47+=======================================+===========================================================+ 48| .. parsed-literal:: | ``set`` of elements |t1...tn|; see | 49| | |Variadic Sequence|. | 50| set<|t1...tn|> | | 51| set\ *n*\ <|t1...tn|> | | 52+---------------------------------------+-----------------------------------------------------------+ 53| .. parsed-literal:: | Identical to ``set``\ *n*\ ``<``\ |t1...tn|\ ``>``; | 54| | see |Variadic Sequence|. | 55| set<|t1...tn|>::type | | 56| set\ *n*\ <|t1...tn|>::type | | 57+---------------------------------------+-----------------------------------------------------------+ 58| ``begin<s>::type`` | An iterator pointing to the beginning of ``s``; | 59| | see |Associative Sequence|. | 60+---------------------------------------+-----------------------------------------------------------+ 61| ``end<s>::type`` | An iterator pointing to the end of ``s``; | 62| | see |Associative Sequence|. | 63+---------------------------------------+-----------------------------------------------------------+ 64| ``size<s>::type`` | The size of ``s``; see |Associative Sequence|. | 65+---------------------------------------+-----------------------------------------------------------+ 66| ``empty<s>::type`` | |true if and only if| ``s`` is empty; see | 67| | |Associative Sequence|. | 68+---------------------------------------+-----------------------------------------------------------+ 69| ``front<s>::type`` | The first element in ``s``; see | 70| | |Associative Sequence|. | 71+---------------------------------------+-----------------------------------------------------------+ 72| ``has_key<s,k>::type`` | |true if and only if| there is one or more elements | 73| | with the key ``k`` in ``s``; see |Associative Sequence|. | 74+---------------------------------------+-----------------------------------------------------------+ 75| ``count<s,k>::type`` | The number of elements with the key ``k`` in ``s``; | 76| | see |Associative Sequence|. | 77+---------------------------------------+-----------------------------------------------------------+ 78| ``order<s,k>::type`` | A unique unsigned |Integral Constant| associated with | 79| | the key ``k`` in ``s``; see |Associative Sequence|. | 80+---------------------------------------+-----------------------------------------------------------+ 81| .. parsed-literal:: | The element associated with the key ``k`` in | 82| | ``s``; see |Associative Sequence|. | 83| at<s,k>::type | | 84| at<s,k,def>::type | | 85+---------------------------------------+-----------------------------------------------------------+ 86| ``key_type<s,x>::type`` | Identical to ``x``; see |Associative Sequence|. | 87+---------------------------------------+-----------------------------------------------------------+ 88| ``value_type<s,x>::type`` | Identical to ``x``; see |Associative Sequence|. | 89+---------------------------------------+-----------------------------------------------------------+ 90| ``insert<s,x>::type`` | A new ``set`` equivalent to ``s`` except that | 91| | :: | 92| | | 93| | at< t, key_type<s,x>::type >::type | 94| | | 95| | is identical to ``value_type<s,x>::type``. | 96+---------------------------------------+-----------------------------------------------------------+ 97| ``insert<s,pos,x>::type`` | Equivalent to ``insert<s,x>::type``; ``pos`` is ignored. | 98+---------------------------------------+-----------------------------------------------------------+ 99| ``erase_key<s,k>::type`` | A new ``set`` equivalent to ``s`` except that | 100| | ``has_key<t, k>::value == false``. | 101+---------------------------------------+-----------------------------------------------------------+ 102| ``erase<s,pos>::type`` | Equivalent to ``erase<s, deref<pos>::type >::type``. | 103+---------------------------------------+-----------------------------------------------------------+ 104| ``clear<s>::type`` | An empty ``set``; see |clear|. | 105+---------------------------------------+-----------------------------------------------------------+ 106 107 108Example 109------- 110 111Basic ``set`` invariants: 112 113.. parsed-literal:: 114 115 typedef set< int,long,double,int_<5> > s; 116 117 BOOST_MPL_ASSERT_RELATION( size<s>::value, ==, 4 ); 118 BOOST_MPL_ASSERT_NOT(( empty<s> )); 119 120 BOOST_MPL_ASSERT(( is_same< at<s,int>::type, int > )); 121 BOOST_MPL_ASSERT(( is_same< at<s,long>::type, long > )); 122 BOOST_MPL_ASSERT(( is_same< at<s,int_<5> >::type, int_<5> > )); 123 BOOST_MPL_ASSERT(( is_same< at<s,char>::type, void\_ > )); 124 125 126.. _nonunique-set-example: 127 128Constructing a ``set`` from a list of potentially non-unique types: 129 130.. parsed-literal:: 131 132 typedef fold< 133 vector<int,int,long,long> 134 , set0<> 135 , insert<_1,_2> 136 >::type s; 137 138 BOOST_MPL_ASSERT_RELATION( size<s>::value, ==, 2 ); 139 140 141See also 142-------- 143 144|Sequences|, |Variadic Sequence|, |Associative Sequence|, |Extensible Associative Sequence|, |set_c|, |map|, |vector| 145 146 147.. copyright:: Copyright � 2001-2011 Aleksey Gurtovoy and David Abrahams 148 Distributed under the Boost Software License, Version 1.0. (See accompanying 149 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 150