1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>Intrusive associative containers: set, multiset, rbtree</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../intrusive.html" title="Chapter 19. Boost.Intrusive"> 10<link rel="prev" href="list.html" title="Intrusive doubly linked list: list"> 11<link rel="next" href="unordered_set_unordered_multiset.html" title="Semi-Intrusive unordered associative containers: unordered_set, unordered_multiset"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="list.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../intrusive.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unordered_set_unordered_multiset.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="intrusive.set_multiset"></a><a class="link" href="set_multiset.html" title="Intrusive associative containers: set, multiset, rbtree">Intrusive associative containers: 29 set, multiset, rbtree</a> 30</h2></div></div></div> 31<div class="toc"><dl class="toc"> 32<dt><span class="section"><a href="set_multiset.html#intrusive.set_multiset.set_multiset_hooks">set, multiset 33 and rbtree hooks</a></span></dt> 34<dt><span class="section"><a href="set_multiset.html#intrusive.set_multiset.set_multiset_containers">set, 35 multiset and rbtree containers</a></span></dt> 36<dt><span class="section"><a href="set_multiset.html#intrusive.set_multiset.set_multiset_example">Example</a></span></dt> 37</dl></div> 38<p> 39 <span class="bold"><strong>Boost.Intrusive</strong></span> also offers associative containers 40 that can be very useful when creating more complex associative containers, 41 like containers maintaining one or more indices with different sorting semantics. 42 Boost.Intrusive associative containers, like most STL associative container 43 implementations are based on red-black trees. 44 </p> 45<p> 46 The memory overhead of these containers is usually 3 pointers and a bit (with 47 alignment issues, this means 3 pointers and an integer). This size can be reduced 48 to 3 pointers if pointers have even alignment (which is usually true in most 49 systems). 50 </p> 51<p> 52 An empty, non constant-time size <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code>, 53 <code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code> or <code class="computeroutput"><a class="link" href="../boost/intrusive/rbtree.html" title="Class template rbtree">rbtree</a></code> has also the size of 3 pointers 54 and an integer (3 pointers when optimized for size). These containers have 55 logarithmic complexity in many operations like searches, insertions, erasures, 56 etc. <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code> and <code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code> are the intrusive equivalents 57 of standard <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">multiset</span></code> 58 containers. 59 </p> 60<p> 61 <code class="computeroutput"><a class="link" href="../boost/intrusive/rbtree.html" title="Class template rbtree">rbtree</a></code> is a superset 62 of <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code> and <code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code> 63 containers that offers functions to insert unique and multiple keys. 64 </p> 65<div class="section"> 66<div class="titlepage"><div><div><h3 class="title"> 67<a name="intrusive.set_multiset.set_multiset_hooks"></a><a class="link" href="set_multiset.html#intrusive.set_multiset.set_multiset_hooks" title="set, multiset and rbtree hooks">set, multiset 68 and rbtree hooks</a> 69</h3></div></div></div> 70<p> 71 <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code>, <code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code> 72 and <code class="computeroutput"><a class="link" href="../boost/intrusive/rbtree.html" title="Class template rbtree">rbtree</a></code> share the 73 same hooks. This is an advantage, because the same user type can be inserted 74 first in a <code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code> 75 and after that in <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code> 76 without changing the definition of the user class. 77 </p> 78<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">Options</span><span class="special">></span> 79<span class="keyword">class</span> <span class="identifier">set_base_hook</span><span class="special">;</span> 80</pre> 81<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 82 <code class="computeroutput"><a class="link" href="../boost/intrusive/set_base_hook.html" title="Class template set_base_hook">set_base_hook</a></code>: 83 the user class derives publicly from <code class="computeroutput"><a class="link" href="../boost/intrusive/set_base_hook.html" title="Class template set_base_hook">set_base_hook</a></code> 84 to make it <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code>/<code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code>-compatible. 85 </li></ul></div> 86<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="special">...</span><span class="identifier">Options</span><span class="special">></span> 87<span class="keyword">class</span> <span class="identifier">set_member_hook</span><span class="special">;</span> 88</pre> 89<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 90 <code class="computeroutput"><a class="link" href="../boost/intrusive/set_member_hook.html" title="Class template set_member_hook">set_member_hook</a></code>: 91 the user class contains a public <code class="computeroutput"><a class="link" href="../boost/intrusive/set_member_hook.html" title="Class template set_member_hook">set_member_hook</a></code> 92 to make it <code class="computeroutput"><a class="link" href="../boost/intrusive/set.html" title="Class template set">set</a></code>/<code class="computeroutput"><a class="link" href="../boost/intrusive/multiset.html" title="Class template multiset">multiset</a></code>-compatible. 93 </li></ul></div> 94<p> 95 <code class="computeroutput"><a class="link" href="../boost/intrusive/set_base_hook.html" title="Class template set_base_hook">set_base_hook</a></code> 96 and <code class="computeroutput"><a class="link" href="../boost/intrusive/set_member_hook.html" title="Class template set_member_hook">set_member_hook</a></code> 97 receive the same options explained in the section <a class="link" href="usage.html" title="How to use Boost.Intrusive">How 98 to use Boost.Intrusive</a> plus a size optimization option: 99 </p> 100<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 101<li class="listitem"> 102 <span class="bold"><strong><code class="computeroutput"><span class="identifier">tag</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Tag</span><span class="special">></span></code></strong></span> 103 (for base hooks only): This argument serves as a tag, so you can derive 104 from more than one base hook. Default: <code class="computeroutput"><span class="identifier">tag</span><span class="special"><</span><span class="identifier">default_tag</span><span class="special">></span></code>. 105 </li> 106<li class="listitem"> 107 <span class="bold"><strong><code class="computeroutput"><span class="identifier">link_mode</span><span class="special"><</span><span class="identifier">link_mode_type</span> 108 <span class="identifier">LinkMode</span><span class="special">></span></code></strong></span>: 109 The linking policy. Default: <code class="computeroutput"><span class="identifier">link_mode</span><span class="special"><</span><span class="identifier">safe_link</span><span class="special">></span></code>. 110 </li> 111<li class="listitem"> 112 <span class="bold"><strong><code class="computeroutput"><span class="identifier">void_pointer</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">VoidPointer</span><span class="special">></span></code></strong></span>: 113 The pointer type to be used internally in the hook and propagated to 114 the container. Default: <code class="computeroutput"><span class="identifier">void_pointer</span><span class="special"><</span><span class="keyword">void</span><span class="special">*></span></code>. 115 </li> 116<li class="listitem"> 117 <span class="bold"><strong><code class="computeroutput"><span class="identifier">optimize_size</span><span class="special"><</span><span class="keyword">bool</span> <span class="identifier">Enable</span><span class="special">></span></code></strong></span>: 118 The hook will be optimized for size instead of speed. The hook will embed 119 the color bit of the red-black tree node in the parent pointer if pointer 120 alignment is even. In some platforms, optimizing the size might reduce 121 speed performance a bit since masking operations will be needed to access 122 parent pointer and color attributes, in other platforms this option improves 123 performance due to improved memory locality. Default: <code class="computeroutput"><span class="identifier">optimize_size</span><span class="special"><</span><span class="keyword">false</span><span class="special">></span></code>. 124 </li> 125</ul></div> 126</div> 127<div class="section"> 128<div class="titlepage"><div><div><h3 class="title"> 129<a name="intrusive.set_multiset.set_multiset_containers"></a><a class="link" href="set_multiset.html#intrusive.set_multiset.set_multiset_containers" title="set, multiset and rbtree containers">set, 130 multiset and rbtree containers</a> 131</h3></div></div></div> 132<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">Options</span><span class="special">></span> 133<span class="keyword">class</span> <span class="identifier">set</span><span class="special">;</span> 134 135<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">Options</span><span class="special">></span> 136<span class="keyword">class</span> <span class="identifier">multiset</span><span class="special">;</span> 137 138<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">Options</span><span class="special">></span> 139<span class="keyword">class</span> <span class="identifier">rbtree</span><span class="special">;</span> 140</pre> 141<p> 142 These containers receive the same options explained in the section <a class="link" href="usage.html" title="How to use Boost.Intrusive">How to use Boost.Intrusive</a>: 143 </p> 144<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 145<li class="listitem"> 146 <span class="bold"><strong><code class="computeroutput"><span class="identifier">base_hook</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Hook</span><span class="special">></span></code></strong></span> 147 / <span class="bold"><strong><code class="computeroutput"><span class="identifier">member_hook</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Hook</span><span class="special">,</span> <span class="identifier">Hook</span> <span class="identifier">T</span><span class="special">::*</span> <span class="identifier">PtrToMember</span><span class="special">></span></code></strong></span> 148 / <span class="bold"><strong><code class="computeroutput"><span class="identifier">value_traits</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">ValueTraits</span><span class="special">></span></code></strong></span>: 149 To specify the hook type or value traits used to configure the container. 150 (To learn about value traits go to the section <a class="link" href="value_traits.html" title="Containers with custom ValueTraits">Containers 151 with custom ValueTraits</a>.) 152 </li> 153<li class="listitem"> 154 <span class="bold"><strong><code class="computeroutput"><span class="identifier">constant_time_size</span><span class="special"><</span><span class="keyword">bool</span> <span class="identifier">Enabled</span><span class="special">></span></code></strong></span>: 155 To activate the constant-time <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code> operation. Default: <code class="computeroutput"><span class="identifier">constant_time_size</span><span class="special"><</span><span class="keyword">true</span><span class="special">></span></code> 156 </li> 157<li class="listitem"> 158 <span class="bold"><strong><code class="computeroutput"><span class="identifier">size_type</span><span class="special"><</span><span class="keyword">typename</span> 159 <span class="identifier">SizeType</span><span class="special">></span></code></strong></span>: 160 To specify the type that will be used to store the size of the container. 161 Default: <code class="computeroutput"><span class="identifier">size_type</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">></span></code> 162 </li> 163</ul></div> 164<p> 165 And they also can receive an additional option: 166 </p> 167<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 168<li class="listitem"> 169 <span class="bold"><strong><code class="computeroutput"><span class="identifier">compare</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Compare</span><span class="special">></span></code></strong></span>: 170 Comparison function for the objects to be inserted in containers. The 171 comparison functor must induce a strict weak ordering. Default: <code class="computeroutput"><span class="identifier">compare</span><span class="special"><</span> 172 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special"><</span><span class="identifier">key_type</span><span class="special">></span> 173 <span class="special">></span></code> 174 </li> 175<li class="listitem"> 176 <span class="bold"><strong><code class="computeroutput"><span class="identifier">key_of_value</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">KeyOfValueFunctionObject</span><span class="special">></span></code></strong></span>: 177 A function object that will define the <code class="computeroutput"><span class="identifier">key_type</span></code> 178 of the value type to be stored. This type will allow a map-like interface. 179 See <a class="link" href="map_multimap.html" title="Map and multimap-like interface for associative containers">Map and multimap-like interface 180 with set and multiset</a> for details. Default: <code class="computeroutput"><span class="identifier">key_type</span></code> 181 is equal to <code class="computeroutput"><span class="identifier">value_type</span></code> 182 (set-like interface). 183 </li> 184</ul></div> 185</div> 186<div class="section"> 187<div class="titlepage"><div><div><h3 class="title"> 188<a name="intrusive.set_multiset.set_multiset_example"></a><a class="link" href="set_multiset.html#intrusive.set_multiset.set_multiset_example" title="Example">Example</a> 189</h3></div></div></div> 190<p> 191 Now let's see a small example using both hooks and both containers: 192 </p> 193<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">intrusive</span><span class="special">/</span><span class="identifier">set</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 194<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span> 195<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">functional</span><span class="special">></span> 196<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cassert</span><span class="special">></span> 197 198<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">intrusive</span><span class="special">;</span> 199 200 <span class="comment">//This is a base hook optimized for size</span> 201<span class="keyword">class</span> <span class="identifier">MyClass</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">set_base_hook</span><span class="special"><</span><span class="identifier">optimize_size</span><span class="special"><</span><span class="keyword">true</span><span class="special">></span> <span class="special">></span> 202<span class="special">{</span> 203 <span class="keyword">int</span> <span class="identifier">int_</span><span class="special">;</span> 204 205 <span class="keyword">public</span><span class="special">:</span> 206 <span class="comment">//This is a member hook</span> 207 <span class="identifier">set_member_hook</span><span class="special"><></span> <span class="identifier">member_hook_</span><span class="special">;</span> 208 209 <span class="identifier">MyClass</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="special">)</span> 210 <span class="special">:</span> <span class="identifier">int_</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span> 211 <span class="special">{}</span> 212 <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">MyClass</span> <span class="special">&</span><span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">MyClass</span> <span class="special">&</span><span class="identifier">b</span><span class="special">)</span> 213 <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">int_</span> <span class="special"><</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">int_</span><span class="special">;</span> <span class="special">}</span> 214 <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">></span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">MyClass</span> <span class="special">&</span><span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">MyClass</span> <span class="special">&</span><span class="identifier">b</span><span class="special">)</span> 215 <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">int_</span> <span class="special">></span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">int_</span><span class="special">;</span> <span class="special">}</span> 216 <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">MyClass</span> <span class="special">&</span><span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">MyClass</span> <span class="special">&</span><span class="identifier">b</span><span class="special">)</span> 217 <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">a</span><span class="special">.</span><span class="identifier">int_</span> <span class="special">==</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">int_</span><span class="special">;</span> <span class="special">}</span> 218<span class="special">};</span> 219 220<span class="comment">//Define a set using the base hook that will store values in reverse order</span> 221<span class="keyword">typedef</span> <span class="identifier">set</span><span class="special"><</span> <span class="identifier">MyClass</span><span class="special">,</span> <span class="identifier">compare</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">greater</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">></span> <span class="special">></span> <span class="special">></span> <span class="identifier">BaseSet</span><span class="special">;</span> 222 223<span class="comment">//Define an multiset using the member hook</span> 224<span class="keyword">typedef</span> <span class="identifier">member_hook</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">,</span> <span class="identifier">set_member_hook</span><span class="special"><>,</span> <span class="special">&</span><span class="identifier">MyClass</span><span class="special">::</span><span class="identifier">member_hook_</span><span class="special">></span> <span class="identifier">MemberOption</span><span class="special">;</span> 225<span class="keyword">typedef</span> <span class="identifier">multiset</span><span class="special"><</span> <span class="identifier">MyClass</span><span class="special">,</span> <span class="identifier">MemberOption</span><span class="special">></span> <span class="identifier">MemberMultiset</span><span class="special">;</span> 226 227<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 228<span class="special">{</span> 229 <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">>::</span><span class="identifier">iterator</span> <span class="identifier">VectIt</span><span class="special">;</span> 230 231 <span class="comment">//Create several MyClass objects, each one with a different value</span> 232 <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">MyClass</span><span class="special">></span> <span class="identifier">values</span><span class="special">;</span> 233 <span class="keyword">for</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">100</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="identifier">values</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">MyClass</span><span class="special">(</span><span class="identifier">i</span><span class="special">));</span> 234 235 <span class="identifier">BaseSet</span> <span class="identifier">baseset</span><span class="special">;</span> 236 <span class="identifier">MemberMultiset</span> <span class="identifier">membermultiset</span><span class="special">;</span> 237 238 <span class="comment">//Check that size optimization is activated in the base hook</span> 239 <span class="identifier">assert</span><span class="special">(</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">set_base_hook</span><span class="special"><</span><span class="identifier">optimize_size</span><span class="special"><</span><span class="keyword">true</span><span class="special">></span> <span class="special">>)</span> <span class="special">==</span> <span class="number">3</span><span class="special">*</span><span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">void</span><span class="special">*));</span> 240 <span class="comment">//Check that size optimization is deactivated in the member hook</span> 241 <span class="identifier">assert</span><span class="special">(</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">set_member_hook</span><span class="special"><>)</span> <span class="special">></span> <span class="number">3</span><span class="special">*</span><span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">void</span><span class="special">*));</span> 242 243 <span class="comment">//Now insert them in the reverse order in the base hook set</span> 244 <span class="keyword">for</span><span class="special">(</span><span class="identifier">VectIt</span> <span class="identifier">it</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()),</span> <span class="identifier">itend</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">itend</span><span class="special">;</span> <span class="special">++</span><span class="identifier">it</span><span class="special">){</span> 245 <span class="identifier">baseset</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(*</span><span class="identifier">it</span><span class="special">);</span> 246 <span class="identifier">membermultiset</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(*</span><span class="identifier">it</span><span class="special">);</span> 247 <span class="special">}</span> 248 249 <span class="comment">//Now test sets</span> 250 <span class="special">{</span> 251 <span class="identifier">BaseSet</span><span class="special">::</span><span class="identifier">reverse_iterator</span> <span class="identifier">rbit</span><span class="special">(</span><span class="identifier">baseset</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">());</span> 252 <span class="identifier">MemberMultiset</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">mit</span><span class="special">(</span><span class="identifier">membermultiset</span><span class="special">.</span><span class="identifier">begin</span><span class="special">());</span> 253 <span class="identifier">VectIt</span> <span class="identifier">it</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()),</span> <span class="identifier">itend</span><span class="special">(</span><span class="identifier">values</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span> 254 255 <span class="comment">//Test the objects inserted in the base hook set</span> 256 <span class="keyword">for</span><span class="special">(;</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">itend</span><span class="special">;</span> <span class="special">++</span><span class="identifier">it</span><span class="special">,</span> <span class="special">++</span><span class="identifier">rbit</span><span class="special">)</span> 257 <span class="keyword">if</span><span class="special">(&*</span><span class="identifier">rbit</span> <span class="special">!=</span> <span class="special">&*</span><span class="identifier">it</span><span class="special">)</span> <span class="keyword">return</span> <span class="number">1</span><span class="special">;</span> 258 259 <span class="comment">//Test the objects inserted in the member hook set</span> 260 <span class="keyword">for</span><span class="special">(</span><span class="identifier">it</span> <span class="special">=</span> <span class="identifier">values</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span> <span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">itend</span><span class="special">;</span> <span class="special">++</span><span class="identifier">it</span><span class="special">,</span> <span class="special">++</span><span class="identifier">mit</span><span class="special">)</span> 261 <span class="keyword">if</span><span class="special">(&*</span><span class="identifier">mit</span> <span class="special">!=</span> <span class="special">&*</span><span class="identifier">it</span><span class="special">)</span> <span class="keyword">return</span> <span class="number">1</span><span class="special">;</span> 262 <span class="special">}</span> 263 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> 264<span class="special">}</span> 265</pre> 266</div> 267</div> 268<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 269<td align="left"></td> 270<td align="right"><div class="copyright-footer">Copyright © 2005 Olaf Krzikalla<br>Copyright © 2006-2015 Ion Gaztanaga<p> 271 Distributed under the Boost Software License, Version 1.0. (See accompanying 272 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 273 </p> 274</div></td> 275</tr></table> 276<hr> 277<div class="spirit-nav"> 278<a accesskey="p" href="list.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../intrusive.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="unordered_set_unordered_multiset.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 279</div> 280</body> 281</html> 282