blob: 9f4ed1044879f685e8c5771f2591c3649fb0e73a [file] [log] [blame]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed
with this work for additional information regarding copyright
ownership. The ASF licenses this file to you under the Apache
License, Version 2.0 (the License); you may not use this file
except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language governing
permissions and limitations under the License.
Copyright 1999-2007 Rogue Wave Software, Inc.
-->
<HTML>
<HEAD>
<TITLE>The map Data Abstraction</TITLE>
<LINK REL=StyleSheet HREF="../rw.css" TYPE="text/css" TITLE="Apache stdcxx Stylesheet"></HEAD>
<BODY BGCOLOR=#FFFFFF>
<A HREF="9.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="9-2.html"><IMG SRC="images/bnext.gif" WIDTH=25 HEIGHT=21 ALT="Next file" BORDER=O></A><DIV CLASS="DOCUMENTNAME"><B>Apache C++ Standard Library User's Guide</B></DIV>
<H2>9.1 The map Data Abstraction</H2>
<A NAME="idx163"><!></A>
<P>A <B><I><A HREF="../stdlibref/map.html">map</A></I></B> is an indexed data structure, similar to a <B><I><A HREF="../stdlibref/vector.html">vector</A></I></B> or a <B><I><A HREF="../stdlibref/deque.html">deque</A></I></B>. However, a <B><I>map</I></B> differs from a <B><I>vector</I></B> or <B><I>deque</I></B> in two important respects:</P>
<UL>
<LI><P CLASS="LIST">First, in a <B><I><A HREF="../stdlibref/map.html">map</A></I></B> the index values or<I> key values</I> need not be <SAMP>int</SAMP>, but can be any ordered datatype. For example, a <B><I>map</I></B> can be indexed by real numbers, or by strings. Any datatype for which a comparison operator can be defined can be used as a key. As with a <B><I><A HREF="../stdlibref/vector.html">vector</A></I></B> or <B><I><A HREF="../stdlibref/deque.html">deque</A></I></B>, elements can be accessed through the subscript operator or other techniques. </P></LI>
<LI><P CLASS="LIST">Second, a <B><I><A HREF="../stdlibref/map.html">map</A></I></B> is an ordered data structure. This means that elements are maintained in sequence, the ordering determined by key values. Because <B><I>map</I></B>s maintain values in order, they can very rapidly find the element specified by any given key. Searching is performed in logarithmic time. Like a <B><I><A HREF="../stdlibref/list.html">list</A></I></B>, maps are not limited in size, but expand or contract as necessary as new elements are added or removed. In large part, a <B><I>map</I></B> can simply be considered a <B><I><A HREF="../stdlibref/set.html">set</A></I></B> that maintains a collection of pairs.</P></LI>
</UL>
<P>In other programming languages, a map-like data structure is sometimes referred to as a dictionary, a table, or an associative array. In the C++ Standard Library, there are two varieties of maps:</P>
<UL>
<LI><P CLASS="LIST">The <B><I><A HREF="../stdlibref/map.html">map</A></I></B> data structure demands unique keys; that is, there is a one-to-one association between key elements and their corresponding values. In a <B><I>map</I></B>, the insertion of a new value that uses an existing key is ignored. </P></LI>
<A NAME="idx164"><!></A>
<LI><P CLASS="LIST">The <B><I><A HREF="../stdlibref/multimap.html">multimap</A></I></B> permits multiple different entries to be indexed by the same key. </P></LI>
</UL>
<P>Both data structures provide relatively fast insertion, deletion, and access operations in logarithmic time. </P>
<A NAME="911"><H3>9.1.1 Include files</H3></A>
<A NAME="idx165"><!></A>
<P>Whenever you use a <B><I><A HREF="../stdlibref/map.html">map</A></I></B> or a <B><I><A HREF="../stdlibref/multimap.html">multimap</A></I></B>, you must include the <SAMP>map</SAMP> header file.</P>
<UL><PRE>
#include &lt;map&gt;
</PRE></UL>
<BR>
<HR>
<A HREF="9.html"><IMG SRC="images/bprev.gif" WIDTH=20 HEIGHT=21 ALT="Previous file" BORDER=O></A><A HREF="noframes.html"><IMG SRC="images/btop.gif" WIDTH=56 HEIGHT=21 ALT="Top of Document" BORDER=O></A><A HREF="booktoc.html"><IMG SRC="images/btoc.gif" WIDTH=56 HEIGHT=21 ALT="Contents" BORDER=O></A><A HREF="tindex.html"><IMG SRC="images/bindex.gif" WIDTH=56 HEIGHT=21 ALT="Index page" BORDER=O></A><A HREF="9-2.html"><IMG SRC="images/bnext.gif" WIDTH=20 HEIGHT=21 ALT="Next file" BORDER=O></A>
<!-- Google Analytics tracking code -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-1775151-1";
urchinTracker();
</script>
<!-- end of Google Analytics tracking code -->
</BODY>
</HTML>