]> git.saurik.com Git - wxWidgets.git/blob - docs/latex/wx/hashset.tex
Ref counting overview.
[wxWidgets.git] / docs / latex / wx / hashset.tex
1 \section{\class{wxHashSet}}\label{wxhashset}
2
3 This is a simple, type-safe, and reasonably efficient hash set class,
4 whose interface is a subset of the interface of STL containers. In
5 particular, the interface is modeled after std::set, and the various,
6 non-standard, std::hash\_map.
7
8 \wxheading{Example}
9
10 \begin{verbatim}
11 class MyClass { /* ... */ };
12
13 // same, with MyClass* keys (only uses pointer equality!)
14 WX_DECLARE_HASH_SET( MyClass*, wxPointerHash, wxPointerEqual, MySet1 );
15 // same, with int keys
16 WX_DECLARE_HASH_SET( int, wxIntegerHash, wxIntegerEqual, MySet2 );
17 // declare a hash set with string keys
18 WX_DECLARE_HASH_SET( wxString, wxStringHash, wxStringEqual, MySet3 );
19
20 MySet1 h1;
21 MySet2 h1;
22 MySet3 h3;
23
24 // store and retrieve values
25 h1.insert( new MyClass( 1 ) );
26
27 h3.insert( "foo" );
28 h3.insert( "bar" );
29 h3.insert( "baz" );
30
31 int size = h3.size(); // now is three
32 bool has_foo = h3.find( "foo" ) != h3.end();
33
34 h3.insert( "bar" ); // still has size three
35
36 // iterate over all the elements in the class
37 MySet3::iterator it;
38 for( it = h3.begin(); it != h3.end(); ++it )
39 {
40 wxString key = *it;
41 // do something useful with key
42 }
43 \end{verbatim}
44
45 \wxheading{Declaring new hash set types}
46
47 \begin{verbatim}
48 WX_DECLARE_HASH_SET( KEY_T, // type of the keys
49 HASH_T, // hasher
50 KEY_EQ_T, // key equality predicate
51 CLASSNAME); // name of the class
52 \end{verbatim}
53
54 The HASH\_T and KEY\_EQ\_T are the types
55 used for the hashing function and key comparison. wxWidgets provides
56 three predefined hashing functions: {\tt wxIntegerHash}
57 for integer types ( {\tt int}, {\tt long}, {\tt short},
58 and their unsigned counterparts ), {\tt wxStringHash} for strings
59 ( {\tt wxString}, {\tt wxChar*}, {\tt char*} ), and
60 {\tt wxPointerHash} for any kind of pointer.
61 Similarly three equality predicates:
62 {\tt wxIntegerEqual}, {\tt wxStringEqual}, {\tt wxPointerEqual} are provided.
63
64 Using this you could declare a hash set using {\tt int} values like this:
65
66 \begin{verbatim}
67 WX_DECLARE_HASH_SET( int,
68 wxIntegerHash,
69 wxIntegerEqual,
70 MySet );
71
72 // using an user-defined class for keys
73 class MyKey { /* ... */ };
74
75 // hashing function
76 class MyKeyHash
77 {
78 public:
79 MyKeyHash() { }
80
81 unsigned long operator()( const MyKey& k ) const
82 { /* compute the hash */ }
83
84 MyKeyHash& operator=(const MyKeyHash&) { return *this; }
85 };
86
87 // comparison operator
88 class MyKeyEqual
89 {
90 public:
91 MyKeyEqual() { }
92 bool operator()( const MyKey& a, const MyKey& b ) const
93 { /* compare for equality */ }
94
95 MyKeyEqual& operator=(const MyKeyEqual&) { return *this; }
96 };
97
98 WX_DECLARE_HASH_SET( MyKey, // type of the keys
99 MyKeyHash, // hasher
100 MyKeyEqual, // key equality predicate
101 CLASSNAME); // name of the class
102 \end{verbatim}
103
104 \latexignore{\rtfignore{\wxheading{Types}}}
105
106 In the documentation below you should replace wxHashSet with the name
107 you used in the class declaration.
108
109 \begin{twocollist}
110 \twocolitem{wxHashSet::key\_type}{Type of the hash keys}
111 \twocolitem{wxHashSet::mapped\_type}{Type of hash keys}
112 \twocolitem{wxHashSet::value\_type}{Type of hash keys}
113 \twocolitem{wxHashSet::iterator}{Used to enumerate all the elements in a hash
114 set; it is similar to a {\tt value\_type*}}
115 \twocolitem{wxHashSet::const\_iterator}{Used to enumerate all the elements
116 in a constant hash set; it is similar to a {\tt const value\_type*}}
117 \twocolitem{wxHashSet::size\_type}{Used for sizes}
118 \twocolitem{wxHashSet::Insert\_Result}{The return value for
119 \helpref{insert()}{wxhashsetinsert}}
120 \end{twocollist}
121
122 \wxheading{Iterators}
123
124 An iterator is similar to a pointer, and so you can use the usual pointer
125 operations: {\tt ++it} ( and {\tt it++} ) to move to the next element,
126 {\tt *it} to access the element pointed to, {\tt *it}
127 to access the value of the element pointed to.
128 Hash sets provide forward only iterators, this
129 means that you can't use {\tt --it}, {\tt it + 3}, {\tt it1 - it2}.
130
131 \wxheading{Include files}
132
133 <wx/hashset.h>
134
135 \latexignore{\rtfignore{\wxheading{Members}}}
136
137 \membersection{wxHashSet::wxHashSet}\label{wxhashsetctor}
138
139 \func{}{wxHashSet}{\param{size\_type}{ size = 10}}
140
141 The size parameter is just a hint, the table will resize automatically
142 to preserve performance.
143
144 \func{}{wxHashSet}{\param{const wxHashSet\&}{ set}}
145
146 Copy constructor.
147
148 \membersection{wxHashSet::begin}\label{wxhashsetbegin}
149
150 \constfunc{const\_iterator}{begin}{}
151
152 \func{iterator}{begin}{}
153
154 Returns an iterator pointing at the first element of the hash set.
155 Please remember that hash sets do not guarantee ordering.
156
157 \membersection{wxHashSet::clear}\label{wxhashsetclear}
158
159 \func{void}{clear}{}
160
161 Removes all elements from the hash set.
162
163 \membersection{wxHashSet::count}\label{wxhashsetcount}
164
165 \constfunc{size\_type}{count}{\param{const key\_type\&}{ key}}
166
167 Counts the number of elements with the given key present in the set.
168 This function returns only 0 or 1.
169
170 \membersection{wxHashSet::empty}\label{wxhashsetempty}
171
172 \constfunc{bool}{empty}{}
173
174 Returns true if the hash set does not contain any elements, false otherwise.
175
176 \membersection{wxHashSet::end}\label{wxhashsetend}
177
178 \constfunc{const\_iterator}{end}{}
179
180 \func{iterator}{end}{}
181
182 Returns an iterator pointing at the one-after-the-last element of the hash set.
183 Please remember that hash sets do not guarantee ordering.
184
185 \membersection{wxHashSet::erase}\label{wxhashseterase}
186
187 \func{size\_type}{erase}{\param{const key\_type\&}{ key}}
188
189 Erases the element with the given key, and returns the number of elements
190 erased (either 0 or 1).
191
192 \func{void}{erase}{\param{iterator}{ it}}
193
194 \func{void}{erase}{\param{const\_iterator}{ it}}
195
196 Erases the element pointed to by the iterator. After the deletion
197 the iterator is no longer valid and must not be used.
198
199 \membersection{wxHashSet::find}\label{wxhashsetfind}
200
201 \func{iterator}{find}{\param{const key\_type\&}{ key}}
202
203 \constfunc{const\_iterator}{find}{\param{const key\_type\&}{ key}}
204
205 If an element with the given key is present, the functions returns
206 an iterator pointing at that element, otherwise an invalid iterator
207 is returned (i.e. hashset.find( non\_existent\_key ) == hashset.end()).
208
209 \membersection{wxHashSet::insert}\label{wxhashsetinsert}
210
211 \func{Insert\_Result}{insert}{\param{const value\_type\&}{ v}}
212
213 Inserts the given value in the hash set. The return value is
214 equivalent to a \texttt{std::pair<wxHashMap::iterator, bool>};
215 the iterator points to the inserted element, the boolean value
216 is \texttt{true} if \texttt{v} was actually inserted.
217
218 \membersection{wxHashSet::size}\label{wxhashsetsize}
219
220 \constfunc{size\_type}{size}{}
221
222 Returns the number of elements in the set.
223