]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | <HTML> |
2 | <!-- | |
3 | Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000 | |
4 | ||
5 | Distributed under the Boost Software License, Version 1.0. | |
6 | (See accompanying file LICENSE_1_0.txt or copy at | |
7 | http://www.boost.org/LICENSE_1_0.txt) | |
8 | --> | |
9 | <Head> | |
10 | <Title>Associative Property Map Adaptor</Title> | |
11 | <BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" | |
12 | ALINK="#ff0000"> | |
13 | <IMG SRC="../../../boost.png" | |
14 | ALT="C++ Boost" width="277" height="86"> | |
15 | ||
16 | <BR Clear> | |
17 | ||
18 | ||
19 | <H2><A NAME="sec:associative-property-map"></A> | |
20 | </h2> | |
21 | <PRE> | |
22 | associative_property_map<UniquePairAssociativeContainer> | |
23 | </PRE> | |
24 | ||
25 | <P> | |
26 | This property map is an adaptor that converts any type that is a model | |
27 | of both <a | |
28 | href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html">Pair | |
29 | Associative Container</a> and <a | |
30 | href="http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html">Unique | |
31 | Associative Container</a> such as <a | |
32 | href="http://www.sgi.com/tech/stl/Map.html"><tt>std::map</tt></a> into | |
33 | a mutable <a href="./LvaluePropertyMap.html">Lvalue Property Map</a>. | |
34 | Note that the adaptor only retains a reference to the container, so | |
35 | the lifetime of the container must encompass the use of the adaptor. | |
36 | </P> | |
37 | ||
38 | <h3>Example</h3> | |
39 | ||
40 | <a href="../example/example1.cpp">example1.cpp</a>: | |
41 | <pre>#include <iostream> | |
42 | #include <map> | |
43 | #include <string> | |
44 | #include <boost/property_map/property_map.hpp> | |
45 | ||
46 | ||
47 | template <typename AddressMap> | |
48 | void foo(AddressMap address) | |
49 | { | |
50 | typedef typename boost::property_traits<AddressMap>::value_type value_type; | |
51 | typedef typename boost::property_traits<AddressMap>::key_type key_type; | |
52 | ||
53 | value_type old_address, new_address; | |
54 | key_type fred = "Fred"; | |
55 | old_address = get(address, fred); | |
56 | new_address = "384 Fitzpatrick Street"; | |
57 | put(address, fred, new_address); | |
58 | ||
59 | key_type joe = "Joe"; | |
60 | value_type& joes_address = address[joe]; | |
61 | joes_address = "325 Cushing Avenue"; | |
62 | } | |
63 | ||
64 | int | |
65 | main() | |
66 | { | |
67 | std::map<std::string, std::string> name2address; | |
68 | boost::associative_property_map< std::map<std::string, std::string> > | |
69 | address_map(name2address); | |
70 | ||
71 | name2address.insert(make_pair(std::string("Fred"), | |
72 | std::string("710 West 13th Street"))); | |
73 | name2address.insert(make_pair(std::string("Joe"), | |
74 | std::string("710 West 13th Street"))); | |
75 | ||
76 | foo(address_map); | |
77 | ||
78 | for (std::map<std::string, std::string>::iterator i = name2address.begin(); | |
79 | i != name2address.end(); ++i) | |
80 | std::cout << i->first << ": " << i->second << "\n"; | |
81 | ||
82 | return EXIT_SUCCESS; | |
83 | }</pre> | |
84 | ||
85 | <H3>Where Defined</H3> | |
86 | ||
87 | <P> | |
88 | <a href="../../../boost/property_map/property_map.hpp"><TT>boost/property_map/property_map.hpp</TT></a> | |
89 | ||
90 | <p> | |
91 | <H3>Model Of</H3> | |
92 | ||
93 | <a href="./LvaluePropertyMap.html">Lvalue Property Map</a> | |
94 | ||
95 | <P> | |
96 | ||
97 | <H3>Template Parameters</H3> | |
98 | ||
99 | <P> | |
100 | ||
101 | <TABLE border> | |
102 | <TR> | |
103 | <th>Parameter</th><th>Description</th><th>Default</th> | |
104 | </tr> | |
105 | ||
106 | ||
107 | <TR> | |
108 | <TD><TT>UniquePairAssociativeContainer</TT></TD> | |
109 | <TD>Must be a model of both <a | |
110 | href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html">Pair | |
111 | Associative Container</a> and <a | |
112 | href="http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html">Unique | |
113 | Associative Container</a> .</TD> | |
114 | <TD> </td> | |
115 | </tr> | |
116 | ||
117 | </TABLE> | |
118 | <P> | |
119 | ||
120 | <H3>Members</H3> | |
121 | ||
122 | <P> | |
123 | In addition to the methods and functions required by <a | |
124 | href="./LvaluePropertyMap.html">Lvalue Property Map</a>, this | |
125 | class has the following members. | |
126 | ||
127 | <hr> | |
128 | ||
129 | <pre> | |
130 | property_traits<associative_property_map>::value_type | |
131 | </pre> | |
132 | This is the same type as | |
133 | <TT>UniquePairAssociativeContainer::data_type</TT>. | |
134 | ||
135 | <hr> | |
136 | ||
137 | <pre> | |
138 | associative_property_map() | |
139 | </pre> | |
140 | Default Constructor. | |
141 | ||
142 | <pre> | |
143 | associative_property_map(UniquePairAssociativeContainer& c) | |
144 | </pre> | |
145 | Constructor. | |
146 | ||
147 | <hr> | |
148 | ||
149 | <pre> | |
150 | data_type& operator[](const key_type& k) const | |
151 | </pre> | |
152 | The operator bracket for property access. | |
153 | The <TT>key_type</TT> and | |
154 | <TT>data_type</TT> types are from the typedefs inside of | |
155 | <TT>UniquePairAssociativeContainer</TT>. | |
156 | ||
157 | <hr> | |
158 | ||
159 | <h3>Non-Member functions</h3> | |
160 | ||
161 | <hr> | |
162 | ||
163 | <pre> | |
164 | template <typename UniquePairAssociativeContainer> | |
165 | associative_property_map<UniquePairAssociativeContainer> | |
166 | make_assoc_property_map(UniquePairAssociativeContainer& c); | |
167 | </pre> | |
168 | A function for conveniently creating an associative property map. | |
169 | ||
170 | ||
171 | ||
172 | <hr> | |
173 | ||
174 | ||
175 | <br> | |
176 | <HR> | |
177 | <TABLE> | |
178 | <TR valign=top> | |
179 | <TD nowrap>Copyright © 2002</TD><TD> | |
180 | <a HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</a>, | |
181 | Indiana University (<A | |
182 | HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)<br> | |
183 | <A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee1@osl.iu.edu">llee1@osl.iu.edu</A>)<br> | |
184 | <A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>, | |
185 | Indiana University (<A | |
186 | HREF="mailto:lums@osl.iu.edu">lums@osl.iu.edu</A>) | |
187 | </TD></TR></TABLE> | |
188 | ||
189 | </BODY> | |
190 | </HTML> |