📄 associativecontainer.html
字号:
<HTML><!-- -- Copyright (c) 1996-1999 -- Silicon Graphics Computer Systems, Inc. -- -- Permission to use, copy, modify, distribute and sell this software -- and its documentation for any purpose is hereby granted without fee, -- provided that the above copyright notice appears in all copies and -- that both that copyright notice and this permission notice appear -- in supporting documentation. Silicon Graphics makes no -- representations about the suitability of this software for any -- purpose. It is provided "as is" without express or implied warranty. -- -- Copyright (c) 1994 -- Hewlett-Packard Company -- -- Permission to use, copy, modify, distribute and sell this software -- and its documentation for any purpose is hereby granted without fee, -- provided that the above copyright notice appears in all copies and -- that both that copyright notice and this permission notice appear -- in supporting documentation. Hewlett-Packard Company makes no -- representations about the suitability of this software for any -- purpose. It is provided "as is" without express or implied warranty. -- --><Head><Title>Associative Container</Title><!-- Generated by htmldoc --></HEAD><BODY TEXT="#000000" LINK="#006600" ALINK="#003300" VLINK="#7C7F87" BGCOLOR="#FFFFFF"><A HREF="/"><IMG SRC="/images/common/sgilogo_small.gif" ALT="SGI Logo" WIDTH="80" HEIGHT="72" BORDER="0"></A><P><!--end header--><BR Clear><H1>Associative Container</H1><Table CellPadding=0 CellSpacing=0 width=100%><TR><TD Align=left><Img src = "containers.gif" Alt="" WIDTH = "194" HEIGHT = "38" ></TD><TD Align=right><Img src = "concept.gif" Alt="" WIDTH = "194" HEIGHT = "38" ></TD></TR><TR><TD Align=left VAlign=top><b>Category</b>: containers</TD><TD Align=right VAlign=top><b>Component type</b>: concept</TD></TR></Table><h3>Description</h3>An Associative Container is a variable-sized <A href="Container.html">Container</A> thatsupports efficient retrieval of elements (values) based on keys. Itsupports insertion and removal of elements, but differs from a<A href="Sequence.html">Sequence</A> in that it does not provide a mechanism for inserting anelement at a specific position. <A href="#1">[1]</A><P>As with all containers, the elements in an Associative Container areof type <tt>value_type</tt>. Additionally, each element in an AssociativeContainer has a <i>key</i>, of type <tt>key_type</tt>. In some AssociativeContainers, <A href="SimpleAssociativeContainer.html">Simple Associative Containers</A>, the <tt>value_type</tt> and<tt>key_type</tt> are the same: elements are their own keys. In others, thekey is some specific part of the value. Since elements are storedaccording to their keys, it is essential that the key associated witheach element is immutable. In <A href="SimpleAssociativeContainer.html">Simple Associative Containers</A> thismeans that the elements themselves are immutable, while in other types of Associative Containers, such as <A href="PairAssociativeContainer.html">Pair Associative Containers</A>, the elements themselves are mutable butthe part of an element that is its key cannot be modified. This meansthat an Associative Container's value type is not <A href="Assignable.html">Assignable</A>.<P>The fact that the value type of an Associative Container is not<A href="Assignable.html">Assignable</A> has an important consequence: associativecontainers cannot have mutable iterators. This is simply becausea mutable iterator (as defined in the <A href="trivial.html">Trivial Iterator</A> requirements)must allow assignment. That is, if <tt>i</tt> is a mutable iterator and <tt>t</tt> is an object of <tt>i</tt>'s value type, then <tt>*i = t</tt> must be a validexpression. <P>In <A href="SimpleAssociativeContainer.html">Simple Associative Containers</A>, where the elements are the keys,the elements are completely immutable; the nested types <tt>iterator</tt> and<tt>const_iterator</tt> are therefore the same. Other types of associativecontainers, however, do have mutable elements, and do provideiterators through which elements can be modified. <A href="PairAssociativeContainer.html">Pair Associative Containers</A>, for example, have two differentnested types <tt>iterator</tt> and <tt>const_iterator</tt>. Even in this case,<tt>iterator</tt> is not a mutable iterator: as explained above,it does not provide the expression <tt>*i = t</tt>. It is, however, possibleto modify an element through such an iterator: if, for example, <tt>i</tt>is of type <tt><A href="Map.html">map</A><int, double></tt>, then <tt>(*i).second = 3</tt> is a validexpression.<P>In some associative containers, <A href="UniqueAssociativeContainer.html">Unique Associative Containers</A>,it is guaranteed that no two elements have the same key. <A href="#2">[2]</A> In otherassociative containers, <A href="MultipleAssociativeContainer.html">Multiple Associative Containers</A>, multipleelements with the same key are permitted.<h3>Refinement of</h3><A href="ForwardContainer.html">Forward Container</A>, <A href="DefaultConstructible.html">Default Constructible</A><h3>Associated types</h3>One new type is introduced, in addition to the types defined in the<A href="ForwardContainer.html">Forward Container</A> requirements.<Table border><TR><TD VAlign=top>Key type</TD><TD VAlign=top><tt>X::key_type</tt></TD><TD VAlign=top>The type of the key associated with <tt>X::value_type</tt>. Note that the key type and value type might be the same.</TD></tr></table><h3>Notation</h3><Table><TR><TD VAlign=top><tt>X</tt></TD><TD VAlign=top>A type that is a model of Associative Container</TD></TR><TR><TD VAlign=top><tt>a</tt></TD><TD VAlign=top>Object of type <tt>X</tt></TD></TR><TR><TD VAlign=top><tt>t</tt></TD><TD VAlign=top>Object of type <tt>X::value_type</tt></TD></TR><TR><TD VAlign=top><tt>k</tt></TD><TD VAlign=top>Object of type <tt>X::key_type</tt></TD></TR><TR><TD VAlign=top><tt>p</tt>, <tt>q</tt></TD><TD VAlign=top>Object of type <tt>X::iterator</tt></TD></tr></table><h3>Definitions</h3>If <tt>a</tt> is an associative container, then <tt>p</tt> is a<i>valid iterator in a</i> if it is a valid iterator that is reachable from <tt>a.begin()</tt>.<P>If <tt>a</tt> is an associative container, then <tt>[p, q)</tt> is a <i>valid range in a</i>if <tt>[p, q)</tt> is a valid range and <tt>p</tt> is a valid iterator in <tt>a</tt>.<h3>Valid expressions</h3>In addition to the expressions defined in <A href="ForwardContainer.html">Forward Container</A>, thefollowing expressions must be valid.<Table border><TR><TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH><TH>Return type</TH></TR><TR><TD VAlign=top>Default constructor</TD><TD VAlign=top><pre>X()X a;</pre></TD><TD VAlign=top> </TD><TD VAlign=top> </TD></TR><TR><TD VAlign=top>Erase key</TD><TD VAlign=top><tt>a.erase(k)</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>size_type</tt></TD></TR><TR><TD VAlign=top>Erase element</TD><TD VAlign=top><tt>a.erase(p)</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>void</tt></TD></TR><TR><TD VAlign=top>Erase range</TD><TD VAlign=top><tt>a.erase(p, q)</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>void</tt></TD></TR><TR><TD VAlign=top>Clear</TD><TD VAlign=top><tt>a.clear()</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>void</tt></TD></TR><TR><TD VAlign=top>Find</TD><TD VAlign=top><tt>a.find(k)</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>iterator</tt> if <tt>a</tt> is mutable, otherwise <tt>const_iterator</tt></TD></TR><TR><TD VAlign=top>Count</TD><TD VAlign=top><tt>a.count(k)</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>size_type</tt></TD></TR><TR><TD VAlign=top>Equal range</TD><TD VAlign=top><tt>a.equal_range(k)</tt></TD><TD VAlign=top> </TD><TD VAlign=top><tt>pair<iterator, iterator></tt> if <tt>a</tt> is mutable, otherwise <tt>pair<const_iterator, const_iterator></tt>.</TD></tr></table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -