Re: CMAP under vs2005+



Tommy wrote:
In other words, using an example with the traditional CMap class
collection:

CMap<CString, const char *,CString, const char *> map;

map["key1"] = "ext 2223";
map["KEY1"] = "ext 2223";
map["kEy2"] = "ext 2225";
map["Key2"] = "ext 2225";

However, this is four unique keys. So CMapEx allowed me to do this in
a case insensitive manner:

CMapEx<CString, const char *> map;

map["key1"] = "ext 2223";
map["KEY1"] = "ext 2223"; // Overrides first key1
map["kEy2"] = "ext 2225";
map["Key2"] = "ext 2225"; // Overrides first kEy2

There would be only two keys here.

CMapEx was been extremely valuable in my software compiled under VC6,
and now that I am moving to VS2005, of course, I am coming across some
afx template compatibility issues.

I guess I would like to ask if A) is it possible with a compiler
define or something that make afxtempl.h behavior the same? or B) is
there is a alternative approach, maybe using std c/c++ template that
will give me the same case insensitive collection behavior?

The C++ standard's template std::map<> uses an optional parameter that
defines how keys are compared to each other. I'd check and see if MFC's
CMap<> does anything similar.

If is possible to use CMap with an unique HashKey function unique to
CMapEx wrapper for CMAP so I can make the hash case insensitive?

There is another approach, and that is to always only store lowercase or
uppercase strings as keys. Either using a custom key class (that otherwise
behaves like a string) or a wrapper around CMap would both work if changing
the key comparison isn't possible.

Uli

--
C++ FAQ: http://parashift.com/c++-faq-lite

Sator Laser GmbH
Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932
.