Re: an string array problem

From: david li (davidli_at_augmentum.com.cn)
Date: 11/12/04


Date: Fri, 12 Nov 2004 10:43:51 +0800

Thanks so much all you guys.

"Filip Konvicka" <filip.konvicka.remove_this_antispam_token_please@logis.cz>
写入消息新闻:ONuco8lxEHA.392@TK2MSFTNGP12.phx.gbl...
> Hi Li,
>
> it seems that you want to do lookup. This is best done using a "hashset",
> which is partly supported by the C++ standard. If you want to stick to the
> current standard, you may still use the "set" container. The code works as
> follows:
>
> #include <set>
> using namespace std;
> typedef set<string> StringSet;
> int main(int argc, char* argv[]) {
> StringSet mySet;
> // fill in the set
> mySet.insert(string("dot"));
> mySet.insert(string("polygon"));
> ...
> // look up a string
> string test("polygon");
> StringSet::iterator i, e=mySet.end();
> i=mySet.find(test);
> if ( i==e )
> cout << "Not found" << endl;
> else
> cout << "Found!" << end;
> }
>
> I haven't compiled this, so sorry for any typos... You may wrap the set
into
> a global class (and fill in the set in the constructor), or just create a
> global instance of the set and fill it in the main() function before
> anything other takes place.
>
> Searching in a set is faster than iterative comparisons (i.e. linear
search)
> in an array. This is because the set is sorted internally (so for N items
> you only test at most log(N) items to find the minimum, compared to at
most
> N items using an unsorted array). A hashset (stdext::hashset in recent VC
> and std::hashset or __gnu_cxx::hashset in g++) is even better: usually it
> only takes "constant time" to check for presence of a string in a hashset
> (i.e. for N items in the set, it only takes about 1 comparison to tell
> whether the string is in the set). In other words: for big number of
words,
> sets might be much more efficient than C arrays!! (For hashset, this even
> holds true for small numbers of words.)
>
> If you need to store an element with your "key" (e.g. "polygon" = "3" and
> for "polygon" you want the "3"), use a "map" (resp. "hashmap").
>
> Remember, the standard containers (std::vector, std::list, std::deque,
> std::set, std::map, stdext::hashset, stdext::hashmap and others) are your
> big friends in C++! Understanding lists, sets, queues and maps is very
> important if you want efficient programs.
>
> Best Regards and Good Luck,
> Filip
>
> "david li" <davidli@augmentum.com.cn> p砉e v diskusn韒 psp靨ku
> news:ucGh7ykxEHA.3212@TK2MSFTNGP09.phx.gbl...
> > I want to use == function of string. because my string will be compared
to
> > that set. do I need to use strcmp instead of ==? sometime it's hard to
> make
> > decision. I want to do it in C++ way, remove all C feature. but C has
more
> > efficient.
> > Thanks so much for your mail
> >
> > "josh" <smileyfaceswillruletheworld@yahoo.com.NOSPAM>
> > ??????:#qKBGrixEHA.908@TK2MSFTNGP11.phx.gbl...
> > > david li wrote:
> > > > Hi, all:
> > > >
> > > > I have a question. In C we can use following way to get the string
> > number in
> > > > an array:
> > > > const char* commandSet[] =
> > > > {
> > > > "dot",
> > > > "polygon"
> > > > "rectangle",
> > > > "ellipse",
> > > > "remove",
> > > > "display",
> > > > "help",
> > > > "quit"
> > > > };
> > > >
> > > > nStrNum = sizeof(commandSet) / sizeof(char*);
> > > >
> > > > but If we write it in C++:
> > >
> > > The above code is perfectly good C++. (given the right context, of
> > course)
> > >
> > > > const string commandSet[] =
> > > > {
> > > > "dot",
> > > > "polygon"
> > > > "rectangle",
> > > > "ellipse",
> > > > "remove",
> > > > "display",
> > > > "help",
> > > > "quit"
> > > > };
> > > >
> > > > We can not use the way what we used in C. is there any ways to
> implement
> > > > that? or just put in a vector or list?
> > >
> > > Note that this version involves a number of heap allocations and
string
> > > copies at runtime. Why would you want that? Don't use std::string
for
> > > constants unless you have a very good reason.
> > >
> > > In any case, sizeof(commandSet)/sizeof(*commandSet) will work for
either
> > > of these arrays.
> > >
> > > -josh
> > >
> >
> >
>
>



Relevant Pages

  • Help in French|Spanish|German translation.
    ... I am also an author of User-defined string functions. ... WORDTRANEX (cSearched, cArExpressionSought | cExpressionSough, ... each string of the array is searched ... If the parameter nArStartOccurrence is -1 or omitted, the replacement starts ...
    (microsoft.public.fox.helpwanted)
  • Re: passing a string to a dll
    ... Joe, I really appreciate you taking the time to demonstrate this. ... sure how I would implement indexing it for random alphanumeric codes. ... I might handle the array. ... I actually have been wondering if I could use a second string ...
    (microsoft.public.vc.mfc)
  • Re: passing a string to a dll
    ... I might handle the array. ... I actually have been wondering if I could use a second string ... look at insertion cost, organization cost, and search cost. ...
    (microsoft.public.vc.mfc)
  • Re: Array Type Mismatch
    ... Dim resultAs String ... I am still somewhat confused as to why nothing is stored in the array. ... Public Function TextBoxGetLine(....arguments... ...
    (microsoft.public.access.formscoding)
  • Help in Spanish translation of the description of UDFs
    ... functions of minimum / maximum values among elements of an array column. ... GETALLWORDS- Inserts the words from a string into a global dimensioned ... WORDTRAN- Searches a character string for occurrences of a first word, ... ARRAYSUM- Returns the sum of all or a specified range of numeric (and/or ...
    (microsoft.public.fox.helpwanted)