2006-08-22 15:57:13 +00:00
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > Associative
Sequence< / title >
< link rel = "stylesheet" href = "../../../boostbook.css" type = "text/css" >
< meta name = "generator" content = "DocBook XSL Stylesheets V1.66.1" >
< link rel = "start" href = "../../../index.html" title = "Chapter<65> 1.<2E> Fusion 2.0" >
< link rel = "up" href = "../concepts.html" title = "Concepts" >
< link rel = "prev" href = "random_access_sequence.html" title = "Random
Access Sequence">
< link rel = "next" href = "../containers.html" title = "Containers" >
< / head >
< body bgcolor = "white" text = "black" link = "#0000FF" vlink = "#840084" alink = "#0000FF" >
< table cellpadding = "2" width = "100%" >
< td valign = "top" > < img alt = "Boost C++ Libraries" width = "277" height = "86" src = "../../../../../../../boost.png" > < / td >
< td align = "center" > < a href = "../../../../../../../index.htm" > Home< / a > < / td >
< td align = "center" > < a href = "../../../../../../libraries.htm" > Libraries< / a > < / td >
< td align = "center" > < a href = "../../../../../../../people/people.htm" > People< / a > < / td >
< td align = "center" > < a href = "../../../../../../../more/faq.htm" > FAQ< / a > < / td >
< td align = "center" > < a href = "../../../../../../../more/index.htm" > More< / a > < / td >
< / table >
< hr >
< div class = "spirit-nav" >
< a accesskey = "p" href = "random_access_sequence.html" > < img src = "../../../images/prev.png" alt = "Prev" > < / a > < a accesskey = "u" href = "../concepts.html" > < img src = "../../../images/up.png" alt = "Up" > < / a > < a accesskey = "h" href = "../../../index.html" > < img src = "../../../images/home.png" alt = "Home" > < / a > < a accesskey = "n" href = "../containers.html" > < img src = "../../../images/next.png" alt = "Next" > < / a >
< / div >
< div class = "section" lang = "en" >
< div class = "titlepage" > < div > < div > < h4 class = "title" >
< a name = "fusion.sequences.concepts.associative_sequence" > < / a > < a href = "associative_sequence.html" title = "Associative
Sequence">Associative
Sequence< / a > < / h4 > < / div > < / div > < / div >
< a name = "fusion.sequences.concepts.associative_sequence.description" > < / a > < h5 >
2006-12-14 08:41:22 +00:00
< a name = "id481353" > < / a >
2006-08-22 15:57:13 +00:00
< a href = "associative_sequence.html#fusion.sequences.concepts.associative_sequence.description" > Description< / a >
< / h5 >
< p >
An Associative Sequence allows efficient retrieval of elements based on
keys. Like associative sequences in < a href = "http://www.boost.org/libs/mpl/index.html" target = "_top" > MPL< / a > ,
and unlike associative containers in < a href = "http://en.wikipedia.org/wiki/Standard_Template_Library" target = "_top" > STL< / a > ,
Fusion associative sequences have no implied ordering relation. Instead,
type identity is used to impose an equivalence relation on keys, and the
order in which sequence elements are traversed during iteration is left
unspecified. In addition, unlike < a href = "http://en.wikipedia.org/wiki/Standard_Template_Library" target = "_top" > STL< / a > ,
Associative Sequences have mutable iterators. This is due to the fact that
there is no associated ordering relation and the runtime value of the keys
themselves do not have any effect on the associativity of the sequence.
< / p >
< div class = "variablelist" >
< p class = "title" > < b > Notation< / b > < / p >
< dl >
< dt > < span class = "term" > < tt class = "computeroutput" > < span class = "identifier" > s< / span > < / tt > < / span > < / dt >
< dd >
An Associative Sequence
< / dd >
< dt > < span class = "term" > < tt class = "computeroutput" > < span class = "identifier" > S< / span > < / tt > < / span > < / dt >
< dd >
An Associative Sequence type
< / dd >
< dt > < span class = "term" > < tt class = "computeroutput" > < span class = "identifier" > K< / span > < / tt > < / span > < / dt >
< dd >
An arbitrary < span class = "emphasis" > < em > key< / em > < / span > type
< / dd >
< dt > < span class = "term" > < tt class = "computeroutput" > < span class = "identifier" > o< / span > < / tt > < / span > < / dt >
< dd >
An arbitrary object
< / dd >
< dt > < span class = "term" > < tt class = "computeroutput" > < span class = "identifier" > e< / span > < / tt > < / span > < / dt >
< dd >
A Sequence element
< / dd >
< / dl >
< / div >
< a name = "fusion.sequences.concepts.associative_sequence.valid_expressions" > < / a > < h5 >
2006-12-14 08:41:22 +00:00
< a name = "id481515" > < / a >
2006-08-22 15:57:13 +00:00
< a href = "associative_sequence.html#fusion.sequences.concepts.associative_sequence.valid_expressions" > Valid
Expressions< / a >
< / h5 >
< p >
For any Associative Sequence the following expressions must be valid:
< / p >
2006-10-30 01:20:23 +00:00
< div class = "informaltable" > < table class = "table" >
2006-08-22 15:57:13 +00:00
< colgroup >
< col >
< col >
< col >
< col >
< / colgroup >
< thead > < tr >
< th > Expression< / th >
< th > Return type< / th >
< th > Type Requirements< / th >
< th > Runtime
Complexity< / th >
< / tr > < / thead >
< tbody >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/functions/has_key.html" title = "has_key" > < tt class = "computeroutput" > < span class = "identifier" > has_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > K< / span > < span class = "special" > > (< / span > < span class = "identifier" > s< / span > < span class = "special" > )< / span > < / tt > < / td >
< td > MPL
Boolean Constant. Convertible to bool.< / td >
< td > <EFBFBD> < / td >
< td > Constant< / td >
< / tr >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/functions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > K< / span > < span class = "special" > > (< / span > < span class = "identifier" > s< / span > < span class = "special" > )< / span > < / tt > < / td >
< td > Any
type< / td >
< td > <EFBFBD> < / td >
< td > Constant< / td >
< / tr >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/functions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > K< / span > < span class = "special" > > (< / span > < span class = "identifier" > s< / span > < span class = "special" > )< / span > <EFBFBD> < span class = "special" > =< / span > <EFBFBD> < span class = "identifier" > o< / span > < / tt > < / td >
< td > Any
type< / td >
< td >
< tt class = "computeroutput" > < span class = "identifier" > s< / span > < / tt >
is mutable and < tt class = "computeroutput" > < span class = "identifier" > e< / span > <EFBFBD> < span class = "special" > =< / span > <EFBFBD> < span class = "identifier" > o< / span > < / tt > ,
where < tt class = "computeroutput" > < span class = "identifier" > e< / span > < / tt > is the first
element in the sequence, is a valid expression.< / td >
< td > Constant< / td >
< / tr >
< / tbody >
2006-10-30 01:20:23 +00:00
< / table > < / div >
2006-08-22 15:57:13 +00:00
< a name = "fusion.sequences.concepts.associative_sequence.result_type_expressions" > < / a > < h5 >
2006-12-14 08:41:22 +00:00
< a name = "id481812" > < / a >
2006-08-22 15:57:13 +00:00
< a href = "associative_sequence.html#fusion.sequences.concepts.associative_sequence.result_type_expressions" > Result
Type Expressions< / a >
< / h5 >
2006-10-30 01:20:23 +00:00
< div class = "informaltable" > < table class = "table" >
2006-08-22 15:57:13 +00:00
< colgroup >
< col >
< col >
< / colgroup >
< thead > < tr >
< th > Expression< / th >
< th > Compile Time Complexity< / th >
< / tr > < / thead >
< tbody >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/metafunctions/has_key.html" title = "has_key" > < tt class = "computeroutput" > < span class = "identifier" > result_of< / span > < span class = "special" > ::< / span > < span class = "identifier" > has_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > S< / span > < span class = "special" > ,< / span > <EFBFBD> < span class = "identifier" > K< / span > < span class = "special" > > ::< / span > < span class = "identifier" > type< / span > < / tt > < / td >
< td > Amortized constant
time< / td >
< / tr >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/metafunctions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > result_of< / span > < span class = "special" > ::< / span > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > S< / span > < span class = "special" > ,< / span > <EFBFBD> < span class = "identifier" > K< / span > < span class = "special" > > ::< / span > < span class = "identifier" > type< / span > < / tt > < / td >
< td > Amortized constant
time< / td >
< / tr >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/metafunctions/value_at_key.html" title = "value_at_key" > < tt class = "computeroutput" > < span class = "identifier" > result_of< / span > < span class = "special" > ::< / span > < span class = "identifier" > value_at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > S< / span > < span class = "special" > ,< / span > <EFBFBD> < span class = "identifier" > K< / span > < span class = "special" > > ::< / span > < span class = "identifier" > type< / span > < / tt > < / td >
< td > Amortized constant
time< / td >
< / tr >
< / tbody >
2006-10-30 01:20:23 +00:00
< / table > < / div >
2006-08-22 15:57:13 +00:00
< p class = "blurb" >
< span class = "inlinemediaobject" > < img src = "../../../images/note.png" alt = "note" > < / span > <EFBFBD> < tt class = "computeroutput" > < a href = "../intrinsics/metafunctions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > result_of< / span > < span class = "special" > ::< / span > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > S< / span > < span class = "special" > ,< / span > <EFBFBD> < span class = "identifier" > K< / span > < span class = "special" > > < / span > < / tt >
returns the actual type returned by < tt class = "computeroutput" > < a href = "../intrinsics/functions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > K< / span > < span class = "special" > > (< / span > < span class = "identifier" > s< / span > < span class = "special" > )< / span > < / tt > . In
most cases, this is a reference. Hence, there is no way to know the exact
element type using < tt class = "computeroutput" > < a href = "../intrinsics/metafunctions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > result_of< / span > < span class = "special" > ::< / span > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > S< / span > < span class = "special" > ,< / span > <EFBFBD> < span class = "identifier" > K< / span > < span class = "special" > > < / span > < / tt > .The
element at < tt class = "computeroutput" > < span class = "identifier" > K< / span > < / tt > may actually
be a reference to begin with. For this purpose, you can use < tt class = "computeroutput" > < a href = "../intrinsics/metafunctions/value_at_key.html" title = "value_at_key" > < tt class = "computeroutput" > < span class = "identifier" > result_of< / span > < span class = "special" > ::< / span > < span class = "identifier" > value_at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > S< / span > < span class = "special" > ,< / span > <EFBFBD> < span class = "identifier" > N< / span > < span class = "special" > > < / span > < / tt > .
< / p >
< a name = "fusion.sequences.concepts.associative_sequence.expression_semantics" > < / a > < h5 >
2006-12-14 08:41:22 +00:00
< a name = "id482338" > < / a >
2006-08-22 15:57:13 +00:00
< a href = "associative_sequence.html#fusion.sequences.concepts.associative_sequence.expression_semantics" > Expression
Semantics< / a >
< / h5 >
2006-10-30 01:20:23 +00:00
< div class = "informaltable" > < table class = "table" >
2006-08-22 15:57:13 +00:00
< colgroup >
< col >
< col >
< / colgroup >
< thead > < tr >
< th > Expression< / th >
< th > Semantics< / th >
< / tr > < / thead >
< tbody >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/functions/has_key.html" title = "has_key" > < tt class = "computeroutput" > < span class = "identifier" > has_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > K< / span > < span class = "special" > > (< / span > < span class = "identifier" > s< / span > < span class = "special" > )< / span > < / tt > < / td >
< td > A
boolean Integral Constant < tt class = "computeroutput" > < span class = "identifier" > c< / span > < / tt >
such that < tt class = "computeroutput" > < span class = "identifier" > c< / span > < span class = "special" > ::< / span > < span class = "identifier" > value< / span > <EFBFBD> < span class = "special" > ==< / span > <EFBFBD> < span class = "keyword" > true< / span > < / tt > if and only if there is one or
more elements with the key < tt class = "computeroutput" > < span class = "identifier" > k< / span > < / tt >
in < tt class = "computeroutput" > < span class = "identifier" > s< / span > < / tt > ; see < a href = "../intrinsics/functions/has_key.html" title = "has_key" > < tt class = "computeroutput" > < span class = "identifier" > has_key< / span > < / tt > < / a > .< / td >
< / tr >
< tr >
< td > < tt class = "computeroutput" > < a href = "../intrinsics/functions/at_key.html" title = "at_key" > < tt class = "computeroutput" > < span class = "identifier" > at_key< / span > < / tt > < / a > < span class = "special" > < < / span > < span class = "identifier" > K< / span > < span class = "special" > > (< / span > < span class = "identifier" > s< / span > < span class = "special" > )< / span > < / tt > < / td >
< td > The
element associated with the key < tt class = "computeroutput" > < span class = "identifier" > K< / span > < / tt >
in the sequence < tt class = "computeroutput" > < span class = "identifier" > s< / span > < / tt > ;
see < a href = "../intrinsics/functions/at.html" title = "at" > < tt class = "computeroutput" > < span class = "identifier" > at< / span > < / tt > < / a > .< / td >
< / tr >
< / tbody >
2006-10-30 01:20:23 +00:00
< / table > < / div >
2006-08-22 15:57:13 +00:00
< a name = "fusion.sequences.concepts.associative_sequence.models" > < / a > < h5 >
2006-12-14 08:41:22 +00:00
< a name = "id482617" > < / a >
2006-08-22 15:57:13 +00:00
< a href = "associative_sequence.html#fusion.sequences.concepts.associative_sequence.models" > Models< / a >
< / h5 >
< div class = "itemizedlist" > < ul type = "disc" >
< li > < a href = "../containers/set.html" title = "set" > < tt class = "computeroutput" > < span class = "identifier" > set< / span > < / tt > < / a > < / li >
< li > < a href = "../containers/map.html" title = "map" > < tt class = "computeroutput" > < span class = "identifier" > map< / span > < / tt > < / a > < / li >
< / ul > < / div >
< / div >
< table xmlns:rev = "http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width = "100%" > < tr >
< td align = "left" > < / td >
< td align = "right" > < small > Copyright <20> 2001-2005 Joel de Guzman, Dan Marsden< / small > < / td >
< / tr > < / table >
< hr >
< div class = "spirit-nav" >
< a accesskey = "p" href = "random_access_sequence.html" > < img src = "../../../images/prev.png" alt = "Prev" > < / a > < a accesskey = "u" href = "../concepts.html" > < img src = "../../../images/up.png" alt = "Up" > < / a > < a accesskey = "h" href = "../../../index.html" > < img src = "../../../images/home.png" alt = "Home" > < / a > < a accesskey = "n" href = "../containers.html" > < img src = "../../../images/next.png" alt = "Next" > < / a >
< / div >
< / body >
< / html >