...one of the most highly
regarded and expertly designed C++ library projects in the
world.

— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards

Front Page / Sequences / Classes / set |

`set` is a variadic, associative, extensible sequence of types that
supports constant-time insertion and removal of elements, and testing for membership.
A `set` may contain at most one element for each key.

Sequence form | Header |
---|---|

Variadic | #include <boost/mpl/set.hpp> |

Numbered | #include <boost/mpl/set/setn.hpp> |

In the following table, `s` is an instance of `set`, `pos` is an iterator into `s`,
and `x`, `k`, and *t*_{1},*t*_{2},... *t*_{n} is a set of *unique* arbitrary types. [*Note:* See below for
an example of how to construct a `set` from a list of potentially non-unique types — *end note*]

Expression | Semantics |
---|---|

set< |
set of elements t_{1},t_{2},... t_{n}; see
Variadic Sequence. |

set< |
Identical to setn<t_{1},t_{2},... t_{n}>;
see Variadic Sequence. |

begin<s>::type |
An iterator pointing to the beginning of s;
see Associative Sequence. |

end<s>::type |
An iterator pointing to the end of s;
see Associative Sequence. |

size<s>::type |
The size of s; see Associative Sequence. |

empty<s>::type |
A boolean Integral Constant c such that
c::value == true if and only if s is empty; see
Associative Sequence. |

front<s>::type |
The first element in s; see
Associative Sequence. |

has_key<s,k>::type |
A boolean Integral Constant c such that
c::value == true if and only if there is one or more elements
with the key k in s; see Associative Sequence. |

count<s,k>::type |
The number of elements with the key k in s;
see Associative Sequence. |

order<s,k>::type |
A unique unsigned Integral Constant associated with
the key k in s; see Associative Sequence. |

at<s,k>::type at<s,k,def>::type |
The element associated with the key k in
s; see Associative Sequence. |

key_type<s,x>::type |
Identical to x; see Associative Sequence. |

value_type<s,x>::type |
Identical to x; see Associative Sequence. |

insert<s,x>::type |
A new at< t, key_type<s,x>::type >::type is identical to |

insert<s,pos,x>::type |
Equivalent to insert<s,x>::type; pos is ignored. |

erase_key<s,k>::type |
A new set equivalent to s except that
has_key<t, k>::value == false. |

erase<s,pos>::type |
Equivalent to erase<s, deref<pos>::type >::type. |

clear<s>::type |
An empty set; see clear. |

Basic `set` invariants:

typedef set< int,long,double,int_<5> > s; BOOST_MPL_ASSERT_RELATION( size<s>::value, ==, 4 ); BOOST_MPL_ASSERT_NOT(( empty<s> )); BOOST_MPL_ASSERT(( is_same< at<s,int>::type, int > )); BOOST_MPL_ASSERT(( is_same< at<s,long>::type, long > )); BOOST_MPL_ASSERT(( is_same< at<s,int_<5> >::type, int_<5> > )); BOOST_MPL_ASSERT(( is_same< at<s,char>::type, void_ > ));

Constructing a `set` from a list of potentially non-unique types:

typedef fold< vector<int,int,long,long> , set0<> , insert<_1,_2> >::type s; BOOST_MPL_ASSERT_RELATION( size<s>::value, ==, 2 );