]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/hashset.tex
fix warning about comparing (signed) -1 with (unsigned) in_addr_t under Solaris
[wxWidgets.git] / docs / latex / wx / hashset.tex
CommitLineData
8cd74a14
MB
1\section{\class{wxHashSet}}\label{wxhashset}
2
3This is a simple, type-safe, and reasonably efficient hash set class,
4whose interface is a subset of the interface of STL containers. In
5particular, the interface is modeled after std::set, and the various,
6non 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
54The HASH\_T and KEY\_EQ\_T are the types
55used for the hashing function and key comparison. wxWidgets provides
56three predefined hashing functions: {\tt wxIntegerHash}
57for integer types ( {\tt int}, {\tt long}, {\tt short},
58and their unsigned counterparts ), {\tt wxStringHash} for strings
59( {\tt wxString}, {\tt wxChar*}, {\tt char*} ), and
60{\tt wxPointerHash} for any kind of pointer.
61Similarly three equality predicates:
62{\tt wxIntegerEqual}, {\tt wxStringEqual}, {\tt wxPointerEqual} are provided.
63
64Using 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
106In the documentation below you should replace wxHashSet with the name
107you 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
114set; it is similar to a {\tt value\_type*}}
115\twocolitem{wxHashSet::const\_iterator}{Used to enumerate all the elements
116in 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
124An iterator is similar to a pointer, and so you can use the usual pointer
125operations: {\tt ++it} ( and {\tt it++} ) to move to the next element,
126{\tt *it} to access the element pointed to, {\tt *it}
127to access the value of the element pointed to.
128Hash sets provide forward only iterators, this
129means 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
141The size parameter is just a hint, the table will resize automatically
142to preserve performance.
143
144\func{}{wxHashSet}{\param{const wxHashSet\&}{ set}}
145
146Copy constructor.
147
148\membersection{wxHashSet::begin}\label{wxhashsetbegin}
149
150\constfunc{const\_iterator}{begin}{}
151
152\func{iterator}{begin}{}
153
154Returns an iterator pointing at the first element of the hash set.
155Please remember that hash sets do not guarantee ordering.
156
157\membersection{wxHashSet::clear}\label{wxhashsetclear}
158
159\func{void}{clear}{}
160
161Removes 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
167Counts the number of elements with the given key present in the set.
168This function returns only 0 or 1.
169
170\membersection{wxHashSet::empty}\label{wxhashsetempty}
171
172\constfunc{bool}{empty}{}
173
174Returns 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
182Returns an iterator pointing at the one-after-the-last element of the hash set.
183Please 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
189Erases the element with the given key, and returns the number of elements
190erased (either 0 or 1).
191
192\func{void}{erase}{\param{iterator}{ it}}
193
194\func{void}{erase}{\param{const\_iterator}{ it}}
195
196Erases the element pointed to by the iterator. After the deletion
197the 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
205If an element with the given key is present, the functions returns
206an iterator pointing at that element, otherwise an invalid iterator
207is 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
213Inserts the given value in the hash set. The return value is
214equivalent to a \texttt{std::pair<wxHashMap::iterator, bool>};
215the iterator points to the inserted element, the boolean value
216is \texttt{true} if \texttt{v} was actually inserted.
217
218\membersection{wxHashSet::size}\label{wxhashsetsize}
219
220\constfunc{size\_type}{size}{}
221
222Returns the number of elements in the set.
223