• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Erasure</title>
5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../index.html" title="Chapter 1. Boost.Icl">
8<link rel="up" href="../function_reference.html" title="Function Reference">
9<link rel="prev" href="insertion.html" title="Insertion">
10<link rel="next" href="intersection.html" title="Intersection">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="insertion.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function_reference.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="intersection.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h3 class="title">
27<a name="boost_icl.function_reference.erasure"></a><a class="link" href="erasure.html" title="Erasure">Erasure</a>
28</h3></div></div></div>
29<div class="toc"><dl class="toc">
30<dt><span class="section"><a href="erasure.html#boost_icl.function_reference.erasure.synopsis">Synopsis</a></span></dt>
31<dt><span class="section"><a href="erasure.html#boost_icl.function_reference.erasure.erasure_of_objects">Erasure
32        of Objects</a></span></dt>
33<dt><span class="section"><a href="erasure.html#boost_icl.function_reference.erasure.erasure_by_iterators">Erasure
34        by Iterators</a></span></dt>
35</dl></div>
36<div class="section">
37<div class="titlepage"><div><div><h4 class="title">
38<a name="boost_icl.function_reference.erasure.synopsis"></a><a class="link" href="erasure.html#boost_icl.function_reference.erasure.synopsis" title="Synopsis">Synopsis</a>
39</h4></div></div></div>
40<div class="informaltable"><table class="table">
41<colgroup>
42<col>
43<col>
44<col>
45<col>
46<col>
47</colgroup>
48<thead><tr>
49<th>
50                  <p>
51                    <span class="emphasis"><em><span class="bold"><strong>Erasure</strong></span></em></span>
52                  </p>
53                </th>
54<th>
55                  <p>
56                    interval<br> sets
57                  </p>
58                </th>
59<th>
60                  <p>
61                    interval<br> maps
62                  </p>
63                </th>
64<th>
65                  <p>
66                    element<br> sets
67                  </p>
68                </th>
69<th>
70                  <p>
71                    element<br> maps
72                  </p>
73                </th>
74</tr></thead>
75<tbody>
76<tr>
77<td>
78                  <p>
79                    <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span>
80                    <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;)</span></code>
81                  </p>
82                </td>
83<td>
84                  <p>
85                    <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a>
86                    <a class="link" href="../interface/function_synopsis.html#interval_type"><span class="bold"><strong>i</strong></span></a>
87                  </p>
88                </td>
89<td>
90                  <p>
91                    <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a>
92                    <a class="link" href="../interface/function_synopsis.html#interval_type"><span class="bold"><strong>i</strong></span></a>
93                    <a class="link" href="../interface/function_synopsis.html#element_mapping_type"><span class="bold"><strong>b</strong></span></a>
94                    <a class="link" href="../interface/function_synopsis.html#interval_mapping_type"><span class="bold"><strong>p</strong></span></a>
95                  </p>
96                </td>
97<td>
98                  <p>
99                    <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a>
100                  </p>
101                </td>
102<td>
103                  <p>
104                    <a class="link" href="../interface/function_synopsis.html#element_mapping_type"><span class="bold"><strong>b</strong></span></a>
105                    <a class="link" href="../interface/function_synopsis.html#interval_mapping_type"><span class="bold"><strong>p</strong></span></a>
106                  </p>
107                </td>
108</tr>
109<tr>
110<td>
111                  <p>
112                    <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span>
113                    <span class="identifier">erase</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;,</span>
114                    <span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;)</span></code>
115                  </p>
116                </td>
117<td>
118                  <p>
119                    <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a>
120                    <a class="link" href="../interface/function_synopsis.html#interval_type"><span class="bold"><strong>i</strong></span></a>
121                    <a class="link" href="../interface/function_synopsis.html#interval_set_types"><span class="bold"><strong>S</strong></span></a>
122                  </p>
123                </td>
124<td>
125                  <p>
126                    <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a>
127                    <a class="link" href="../interface/function_synopsis.html#interval_type"><span class="bold"><strong>i</strong></span></a>
128                    <a class="link" href="../interface/function_synopsis.html#interval_set_types"><span class="bold"><strong>S</strong></span></a>
129                    <a class="link" href="../interface/function_synopsis.html#element_mapping_type"><span class="bold"><strong>b</strong></span></a>
130                    <a class="link" href="../interface/function_synopsis.html#interval_mapping_type"><span class="bold"><strong>p</strong></span></a>
131                    <a class="link" href="../interface/function_synopsis.html#interval_map_types"><span class="bold"><strong>M</strong></span></a>
132                  </p>
133                </td>
134<td>
135                  <p>
136                    <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a>
137                    <a class="link" href="../interface/function_synopsis.html#itl_set_type"><span class="bold"><strong>s</strong></span></a>
138                  </p>
139                </td>
140<td>
141                  <p>
142                    <a class="link" href="../interface/function_synopsis.html#element_mapping_type"><span class="bold"><strong>b</strong></span></a>
143                    <a class="link" href="../interface/function_synopsis.html#itl_map_type"><span class="bold"><strong>m</strong></span></a>
144                  </p>
145                </td>
146</tr>
147<tr>
148<td>
149                  <p>
150                    <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">iterator</span><span class="special">)</span></code>
151                  </p>
152                </td>
153<td>
154                  <p>
155                    1
156                  </p>
157                </td>
158<td>
159                  <p>
160                    1
161                  </p>
162                </td>
163<td>
164                  <p>
165                    1
166                  </p>
167                </td>
168<td>
169                  <p>
170                    1
171                  </p>
172                </td>
173</tr>
174<tr>
175<td>
176                  <p>
177                    <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">iterator</span><span class="special">,</span><span class="identifier">iterator</span><span class="special">)</span></code>
178                  </p>
179                </td>
180<td>
181                  <p>
182                    1
183                  </p>
184                </td>
185<td>
186                  <p>
187                    1
188                  </p>
189                </td>
190<td>
191                  <p>
192                    1
193                  </p>
194                </td>
195<td>
196                  <p>
197                    1
198                  </p>
199                </td>
200</tr>
201</tbody>
202</table></div>
203<h6>
204<a name="boost_icl.function_reference.erasure.synopsis.h0"></a>
205          <span class="phrase"><a name="boost_icl.function_reference.erasure.synopsis.erasure"></a></span><a class="link" href="erasure.html#boost_icl.function_reference.erasure.synopsis.erasure">Erasure</a>
206        </h6>
207<p>
208          The effects of <span class="emphasis"><em><span class="bold"><strong>erasure</strong></span></em></span>
209          implemented by <code class="computeroutput"><span class="identifier">erase</span></code> and
210          <span class="emphasis"><em><span class="bold"><strong>subtraction</strong></span></em></span> implemented
211          by <code class="computeroutput"><span class="identifier">subtract</span></code> and <code class="computeroutput"><span class="keyword">operator</span> <span class="special">-=</span></code>
212          are identical for all Set-types of the <span class="bold"><strong>icl</strong></span>.
213        </p>
214<p>
215          For Map-types, <code class="computeroutput"><span class="identifier">erase</span></code> provides
216          the <span class="bold"><strong>stl</strong></span> semantics of erasure in contrast
217          to <code class="computeroutput"><span class="identifier">subtract</span></code> and <code class="computeroutput"><span class="keyword">operator</span> <span class="special">-=</span></code>,
218          that implement a generalized subtraction, that performs inverse aggregations
219          if key values collide or key intervals overlap.
220        </p>
221<p>
222          Using iterators it is possible to erase objects or ranges of objects the
223          iterator is pointing at from icl Sets and Maps.
224        </p>
225</div>
226<div class="section">
227<div class="titlepage"><div><div><h4 class="title">
228<a name="boost_icl.function_reference.erasure.erasure_of_objects"></a><a class="link" href="erasure.html#boost_icl.function_reference.erasure.erasure_of_objects" title="Erasure of Objects">Erasure
229        of Objects</a>
230</h4></div></div></div>
231<p>
232</p>
233<pre class="programlisting"><span class="comment">/* overload table for */</span>       <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">i</span> <span class="identifier">b</span> <span class="identifier">p</span>
234<span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;)</span>          <span class="special">---+--------</span>
235<span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">erase</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;)</span>          <span class="identifier">s</span> <span class="special">|</span> <span class="identifier">s</span>
236                                <span class="identifier">m</span> <span class="special">|</span>     <span class="identifier">m</span>
237                                <span class="identifier">S</span> <span class="special">|</span> <span class="identifier">S</span> <span class="identifier">S</span>
238                                <span class="identifier">M</span> <span class="special">|</span>     <span class="identifier">M</span> <span class="identifier">M</span>
239</pre>
240<p>
241        </p>
242<p>
243          The next table contains complexity characteristics for the <code class="computeroutput"><span class="identifier">erase</span></code> function on elements and segments.
244        </p>
245<div class="table">
246<a name="boost_icl.function_reference.erasure.erasure_of_objects.t0"></a><p class="title"><b>Table 1.31. Time Complexity for erasure of elements and segments on icl containers</b></p>
247<div class="table-contents"><table class="table" summary="Time Complexity for erasure of elements and segments on icl containers">
248<colgroup>
249<col>
250<col>
251<col>
252<col>
253<col>
254</colgroup>
255<thead><tr>
256<th>
257                  <p>
258                    <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span>
259                    <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;)</span></code><br> <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">erase</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;,</span> <span class="keyword">const</span>
260                    <span class="identifier">P</span><span class="special">&amp;)</span></code>
261                  </p>
262                </th>
263<th>
264                  <p>
265                    domain<br> type
266                  </p>
267                </th>
268<th>
269                  <p>
270                    interval<br> type
271                  </p>
272                </th>
273<th>
274                  <p>
275                    domain<br> mapping<br> type
276                  </p>
277                </th>
278<th>
279                  <p>
280                    interval<br> mapping<br> type
281                  </p>
282                </th>
283</tr></thead>
284<tbody>
285<tr>
286<td>
287                  <p>
288                    <a href="http://www.cplusplus.com/reference/stl/set/" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span></code> </a>
289                  </p>
290                </td>
291<td>
292                  <p>
293                    <span class="emphasis"><em>O(log n)</em></span>
294                  </p>
295                </td>
296<td>
297                </td>
298<td>
299                </td>
300<td>
301                </td>
302</tr>
303<tr>
304<td>
305                  <p>
306                    <code class="computeroutput"><a class="link" href="../../boost/icl/map.html" title="Class template map">icl::map</a></code>
307                  </p>
308                </td>
309<td>
310                  <p>
311                    <span class="emphasis"><em>O(log n)</em></span>
312                  </p>
313                </td>
314<td>
315                </td>
316<td>
317                  <p>
318                    <span class="emphasis"><em>O(log n)</em></span>
319                  </p>
320                </td>
321<td>
322                </td>
323</tr>
324<tr>
325<td>
326                  <p>
327                    <code class="computeroutput"><a class="link" href="../../boost/icl/interval_set.html" title="Class template interval_set">interval_sets</a></code>
328                  </p>
329                </td>
330<td>
331                  <p>
332                    <span class="emphasis"><em>O(log n)</em></span>
333                  </p>
334                </td>
335<td>
336                  <p>
337                    <span class="emphasis"><em>amortized<br> O(log n)</em></span>
338                  </p>
339                </td>
340<td>
341                </td>
342<td>
343                </td>
344</tr>
345<tr>
346<td>
347                  <p>
348                    <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_maps</a></code>
349                  </p>
350                </td>
351<td>
352                  <p>
353                    <span class="emphasis"><em>O(log n)</em></span>
354                  </p>
355                </td>
356<td>
357                  <p>
358                    <span class="emphasis"><em>O(n)</em></span>
359                  </p>
360                </td>
361<td>
362                  <p>
363                    <span class="emphasis"><em>O(log n)</em></span>
364                  </p>
365                </td>
366<td>
367                  <p>
368                    <span class="emphasis"><em>O(n)</em></span>
369                  </p>
370                </td>
371</tr>
372</tbody>
373</table></div>
374</div>
375<br class="table-break"><p>
376          As presented in the overload tables for inplace function <code class="computeroutput"><span class="identifier">erase</span></code> below, more type combinations are
377          available for <span class="emphasis"><em>erasure</em></span> than for <span class="emphasis"><em>insertion</em></span>.
378        </p>
379<p>
380</p>
381<pre class="programlisting"><span class="comment">// overload tables for function    element containers:     interval containers: </span>
382<span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">erase</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;)</span>             <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">b</span> <span class="identifier">s</span> <span class="identifier">m</span>            <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">i</span> <span class="identifier">b</span> <span class="identifier">p</span> <span class="identifier">S</span> <span class="identifier">M</span>
383                                   <span class="special">---+--------</span>            <span class="special">---+------------</span>
384                                    <span class="identifier">s</span> <span class="special">|</span> <span class="identifier">s</span>   <span class="identifier">s</span>               <span class="identifier">S</span> <span class="special">|</span> <span class="identifier">S</span> <span class="identifier">S</span>     <span class="identifier">S</span>
385                                    <span class="identifier">m</span> <span class="special">|</span> <span class="identifier">m</span> <span class="identifier">m</span> <span class="identifier">m</span> <span class="identifier">m</span>             <span class="identifier">M</span> <span class="special">|</span> <span class="identifier">M</span> <span class="identifier">M</span> <span class="identifier">M</span> <span class="identifier">M</span> <span class="identifier">M</span> <span class="identifier">M</span>
386</pre>
387<p>
388          We can split up these overloads in two groups. The first group can be called
389          <span class="emphasis"><em>reverse insertion</em></span>.
390</p>
391<pre class="programlisting"><span class="comment">/* (1) Reverse insertion */</span>        <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">b</span> <span class="identifier">s</span> <span class="identifier">m</span>            <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">i</span> <span class="identifier">b</span> <span class="identifier">p</span> <span class="identifier">S</span> <span class="identifier">M</span>
392                                   <span class="special">---+--------</span>            <span class="special">---+------------</span>
393                                    <span class="identifier">s</span> <span class="special">|</span> <span class="identifier">s</span>   <span class="identifier">s</span>               <span class="identifier">S</span> <span class="special">|</span> <span class="identifier">S</span> <span class="identifier">S</span>     <span class="identifier">S</span>
394                                    <span class="identifier">m</span> <span class="special">|</span>   <span class="identifier">m</span>   <span class="identifier">m</span>             <span class="identifier">M</span> <span class="special">|</span>     <span class="identifier">M</span> <span class="identifier">M</span>   <span class="identifier">M</span>
395</pre>
396<p>
397          The second group can be viewed as an <span class="emphasis"><em>erasure by key objects</em></span>
398</p>
399<pre class="programlisting"><span class="comment">/* (2) Erasure by key objects */</span>   <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">b</span> <span class="identifier">s</span> <span class="identifier">m</span>            <span class="identifier">T</span><span class="special">\</span><span class="identifier">P</span><span class="special">|</span> <span class="identifier">e</span> <span class="identifier">i</span> <span class="identifier">b</span> <span class="identifier">p</span> <span class="identifier">S</span> <span class="identifier">M</span>
400                                   <span class="special">---+--------</span>            <span class="special">---+------------</span>
401                                    <span class="identifier">s</span> <span class="special">|</span> <span class="identifier">s</span>   <span class="identifier">s</span>               <span class="identifier">S</span> <span class="special">|</span> <span class="identifier">S</span> <span class="identifier">S</span>     <span class="identifier">S</span>
402                                    <span class="identifier">m</span> <span class="special">|</span> <span class="identifier">m</span>   <span class="identifier">m</span>               <span class="identifier">M</span> <span class="special">|</span> <span class="identifier">M</span> <span class="identifier">M</span>     <span class="identifier">M</span>
403</pre>
404<p>
405        </p>
406<p>
407          On Maps <span class="emphasis"><em><span class="bold"><strong>reverse insertion (1)</strong></span></em></span>
408          is different from <span class="bold"><strong>stl's</strong></span> erase semantics,
409          because value pairs are deleted only, if key <span class="emphasis"><em><span class="bold"><strong>and</strong></span></em></span>
410          data values are found. Only <span class="emphasis"><em><span class="bold"><strong>erasure by
411          key objects (2)</strong></span></em></span> works like the erase function on
412          <span class="bold"><strong>stl's</strong></span> std::maps, that passes a <span class="emphasis"><em><span class="bold"><strong>key value</strong></span></em></span> as argument.
413        </p>
414<p>
415          On Sets both function groups fall together as <span class="emphasis"><em><span class="bold"><strong>set
416          difference</strong></span></em></span>.
417        </p>
418<p>
419          Complexity characteristics for inplace erasure operations are given by
420          the next tables where
421</p>
422<pre class="programlisting"><span class="identifier">n</span> <span class="special">=</span> <span class="identifier">iterative_size</span><span class="special">(</span><span class="identifier">y</span><span class="special">);</span>
423<span class="identifier">m</span> <span class="special">=</span> <span class="identifier">iterative_size</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> <span class="comment">//if P is a container type</span>
424</pre>
425<p>
426        </p>
427<div class="table">
428<a name="boost_icl.function_reference.erasure.erasure_of_objects.t1"></a><p class="title"><b>Table 1.32. Time Complexity for inplace erasure on element containers</b></p>
429<div class="table-contents"><table class="table" summary="Time Complexity for inplace erasure on element containers">
430<colgroup>
431<col>
432<col>
433<col>
434<col>
435<col>
436</colgroup>
437<thead><tr>
438<th>
439                  <p>
440                    <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span>
441                    <span class="identifier">erase</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span>
442                    <span class="identifier">y</span><span class="special">,</span>
443                    <span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span></code>
444                  </p>
445                </th>
446<th>
447                  <p>
448                    domain<br> type
449                  </p>
450                </th>
451<th>
452                  <p>
453                    domain<br> mapping<br> type
454                  </p>
455                </th>
456<th>
457                  <p>
458                    std::set
459                  </p>
460                </th>
461<th>
462                  <p>
463                    icl::map
464                  </p>
465                </th>
466</tr></thead>
467<tbody>
468<tr>
469<td>
470                  <p>
471                    <a href="http://www.cplusplus.com/reference/stl/set/" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span></code> </a>
472                  </p>
473                </td>
474<td>
475                  <p>
476                    <span class="emphasis"><em>O(log n)</em></span>
477                  </p>
478                </td>
479<td>
480                </td>
481<td>
482                  <p>
483                    <span class="emphasis"><em>O(m log n)</em></span>
484                  </p>
485                </td>
486<td>
487                </td>
488</tr>
489<tr>
490<td>
491                  <p>
492                    <code class="computeroutput"><a class="link" href="../../boost/icl/map.html" title="Class template map">icl::map</a></code>
493                  </p>
494                </td>
495<td>
496                  <p>
497                    <span class="emphasis"><em>O(log n)</em></span>
498                  </p>
499                </td>
500<td>
501                  <p>
502                    <span class="emphasis"><em>O(log n)</em></span>
503                  </p>
504                </td>
505<td>
506                  <p>
507                    <span class="emphasis"><em>O(m log n)</em></span>
508                  </p>
509                </td>
510<td>
511                  <p>
512                    <span class="emphasis"><em>O(m log n)</em></span>
513                  </p>
514                </td>
515</tr>
516</tbody>
517</table></div>
518</div>
519<br class="table-break"><div class="table">
520<a name="boost_icl.function_reference.erasure.erasure_of_objects.t2"></a><p class="title"><b>Table 1.33. Time Complexity for inplace erasure on interval containers</b></p>
521<div class="table-contents"><table class="table" summary="Time Complexity for inplace erasure on interval containers">
522<colgroup>
523<col>
524<col>
525<col>
526<col>
527<col>
528<col>
529<col>
530</colgroup>
531<thead><tr>
532<th>
533                  <p>
534                    <code class="computeroutput"><span class="identifier">T</span><span class="special">&amp;</span>
535                    <span class="identifier">erase</span><span class="special">(</span><span class="identifier">T</span><span class="special">&amp;</span>
536                    <span class="identifier">y</span><span class="special">,</span>
537                    <span class="keyword">const</span> <span class="identifier">P</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span></code>
538                  </p>
539                </th>
540<th>
541                  <p>
542                    domain<br> type
543                  </p>
544                </th>
545<th>
546                  <p>
547                    interval<br> type
548                  </p>
549                </th>
550<th>
551                  <p>
552                    domain<br> mapping<br> type
553                  </p>
554                </th>
555<th>
556                  <p>
557                    interval<br> mapping<br> type
558                  </p>
559                </th>
560<th>
561                  <p>
562                    interval<br> sets
563                  </p>
564                </th>
565<th>
566                  <p>
567                    interval<br> maps
568                  </p>
569                </th>
570</tr></thead>
571<tbody>
572<tr>
573<td>
574                  <p>
575                    interval_sets
576                  </p>
577                </td>
578<td>
579                  <p>
580                    <span class="emphasis"><em>O(log n)</em></span>
581                  </p>
582                </td>
583<td>
584                  <p>
585                    <span class="emphasis"><em>amortized<br> O(log n)</em></span>
586                  </p>
587                </td>
588<td>
589                </td>
590<td>
591                </td>
592<td>
593                  <p>
594                    <span class="emphasis"><em>O(m log(n+m))</em></span>
595                  </p>
596                </td>
597<td>
598                </td>
599</tr>
600<tr>
601<td>
602                  <p>
603                    interval_maps
604                  </p>
605                </td>
606<td>
607                  <p>
608                    <span class="emphasis"><em>O(log n)</em></span>
609                  </p>
610                </td>
611<td>
612                  <p>
613                    <span class="emphasis"><em>amortized<br> O(log n)</em></span>
614                  </p>
615                </td>
616<td>
617                  <p>
618                    <span class="emphasis"><em>O(log n)</em></span>
619                  </p>
620                </td>
621<td>
622                  <p>
623                    <span class="emphasis"><em>O(n)</em></span>
624                  </p>
625                </td>
626<td>
627                  <p>
628                    <span class="emphasis"><em>O(m log(n+m))</em></span>
629                  </p>
630                </td>
631<td>
632                  <p>
633                    <span class="emphasis"><em>O(m log(n+m))</em></span>
634                  </p>
635                </td>
636</tr>
637</tbody>
638</table></div>
639</div>
640<br class="table-break">
641</div>
642<div class="section">
643<div class="titlepage"><div><div><h4 class="title">
644<a name="boost_icl.function_reference.erasure.erasure_by_iterators"></a><a class="link" href="erasure.html#boost_icl.function_reference.erasure.erasure_by_iterators" title="Erasure by Iterators">Erasure
645        by Iterators</a>
646</h4></div></div></div>
647<p>
648          The next table shows the <span class="bold"><strong>icl</strong></span> containers
649          that erasure with iterators is available for. Erase on iterators erases
650          always one <code class="computeroutput"><span class="identifier">value</span></code> of <code class="computeroutput"><span class="identifier">value_type</span></code> for an iterator pointing to
651          it. So we erase
652        </p>
653<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
654<li class="listitem">
655              elements from <a href="http://www.cplusplus.com/reference/stl/set/" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sets</span></code></a>
656            </li>
657<li class="listitem">
658              element-value pairs from <code class="computeroutput"><a class="link" href="../../boost/icl/map.html" title="Class template map">icl::maps</a></code>
659            </li>
660<li class="listitem">
661              intervals from <code class="computeroutput"><a class="link" href="../../boost/icl/interval_set.html" title="Class template interval_set">interval_sets</a></code>
662              and
663            </li>
664<li class="listitem">
665              interval-value-pairs from <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_maps</a></code>
666            </li>
667</ul></div>
668<div class="informaltable"><table class="table">
669<colgroup>
670<col>
671<col>
672<col>
673<col>
674<col>
675</colgroup>
676<thead><tr>
677<th>
678                  <p>
679                    <span class="emphasis"><em><span class="bold"><strong>Erasure by iterators</strong></span></em></span>
680                  </p>
681                </th>
682<th>
683                  <p>
684                    interval<br> sets
685                  </p>
686                </th>
687<th>
688                  <p>
689                    interval<br> maps
690                  </p>
691                </th>
692<th>
693                  <p>
694                    element<br> sets
695                  </p>
696                </th>
697<th>
698                  <p>
699                    element<br> maps
700                  </p>
701                </th>
702</tr></thead>
703<tbody>
704<tr>
705<td>
706                  <p>
707                    <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">iterator</span>
708                    <span class="identifier">pos</span><span class="special">)</span></code>
709                  </p>
710                </td>
711<td>
712                  <p>
713                    <span class="emphasis"><em>amortized O(1)</em></span>
714                  </p>
715                </td>
716<td>
717                  <p>
718                    <span class="emphasis"><em>amortized O(1)</em></span>
719                  </p>
720                </td>
721<td>
722                  <p>
723                    <span class="emphasis"><em>amortized O(1)</em></span>
724                  </p>
725                </td>
726<td>
727                  <p>
728                    <span class="emphasis"><em>amortized O(1)</em></span>
729                  </p>
730                </td>
731</tr>
732<tr>
733<td>
734                  <p>
735                    <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">iterator</span>
736                    <span class="identifier">first</span><span class="special">,</span>
737                    <span class="identifier">iterator</span> <span class="identifier">past</span><span class="special">)</span></code>
738                  </p>
739                </td>
740<td>
741                  <p>
742                    <span class="emphasis"><em>O(k)</em></span>
743                  </p>
744                </td>
745<td>
746                  <p>
747                    <span class="emphasis"><em>O(k)</em></span>
748                  </p>
749                </td>
750<td>
751                  <p>
752                    <span class="emphasis"><em>O(k)</em></span>
753                  </p>
754                </td>
755<td>
756                  <p>
757                    <span class="emphasis"><em>O(k)</em></span>
758                  </p>
759                </td>
760</tr>
761</tbody>
762</table></div>
763<p>
764          Erasing by a single iterator need only <span class="emphasis"><em><span class="bold"><strong>amortized
765          constant time</strong></span></em></span>. Erasing via a range of iterators
766          <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">past</span><span class="special">)</span></code> is of <span class="emphasis"><em><span class="bold"><strong>linear
767          time</strong></span></em></span> in the number <code class="computeroutput"><span class="identifier">k</span></code>
768          of iterators in range <code class="computeroutput"><span class="special">[</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">past</span><span class="special">)</span></code>.
769        </p>
770</div>
771<p>
772        <span class="emphasis"><em><span class="bold"><strong>See also . . .</strong></span></em></span>
773      </p>
774<div class="informaltable"><table class="table">
775<colgroup><col></colgroup>
776<thead><tr></tr></thead>
777<tbody>
778<tr><td>
779                <p>
780                  <a class="link" href="insertion.html" title="Insertion"><span class="emphasis"><em><span class="bold"><strong>Insertion</strong></span></em></span></a>
781                </p>
782              </td></tr>
783<tr><td>
784                <p>
785                  <a class="link" href="subtraction.html" title="Subtraction"><span class="emphasis"><em><span class="bold"><strong>Subtraction</strong></span></em></span></a>
786                </p>
787              </td></tr>
788</tbody>
789</table></div>
790<p>
791        <span class="emphasis"><em><span class="bold"><strong>Back to section . . .</strong></span></em></span>
792      </p>
793<div class="informaltable"><table class="table">
794<colgroup><col></colgroup>
795<thead><tr></tr></thead>
796<tbody>
797<tr><td>
798                <p>
799                  <a class="link" href="../interface/function_synopsis.html#function_synopsis_table"><span class="emphasis"><em><span class="bold"><strong>Function
800                  Synopsis</strong></span></em></span></a>
801                </p>
802              </td></tr>
803<tr><td>
804                <p>
805                  <a class="link" href="../interface.html" title="Interface"><span class="emphasis"><em><span class="bold"><strong>Interface</strong></span></em></span></a>
806                </p>
807              </td></tr>
808</tbody>
809</table></div>
810</div>
811<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
812<td align="left"></td>
813<td align="right"><div class="copyright-footer">Copyright © 2007-2010 Joachim
814      Faulhaber<br>Copyright © 1999-2006 Cortex Software
815      GmbH<p>
816        Distributed under the Boost Software License, Version 1.0. (See accompanying
817        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>)
818      </p>
819</div></td>
820</tr></table>
821<hr>
822<div class="spirit-nav">
823<a accesskey="p" href="insertion.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function_reference.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="intersection.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
824</div>
825</body>
826</html>
827