Re: maps turn into multimaps
brad wrote:
peter koch wrote:
It is unique key, of course. You most likely have a bug in the
comparison function. Show some code if you want more help.
/Peter
It's a test for credit card pre-validation. I added 13 digit visa cards
to the test in addition to the more common 16 digit visa. The prefix for
all visas is "4" (which I use as the key). See below. As I said, it
works, I was just trying to better understand *why* it works :)
struct card_info
{
std::string card_name;
int card_length;
};
typedef std::map<std::string, card_info> cMap;
cMap card_map;
// VISA info
card_info v;
v.card_name = "Visa";
v.card_length = 16;
card_map.insert(std::pair<std::string, card_info>("4", v));
// VISA13 info
card_info v13;
v13.card_name = "Visa";
v13.card_length = 13;
card_map.insert(std::pair<std::string, card_info>("4", v13));
This insert works at compile time and there are no erros at run time, I
can pre-validate either 16 or 13 digit visa cards based on the above info.
I'm not sure that I follow what you're trying to do here.
Suppose that you have a ctor for card_info,
card_info::card_info(const std::string &s, const int l)
:
card_name(s),
card_length(l)
{}
and then I think your code above is the equivalence of:
card_map["4"] = card_info("Visa",16);
card_map["4"] = card_info("Visa",13);
This ends up with card_map having one entry with
key == std::string("4") and value == card_info("Visa",13)
Is this what you want? If so, then why bother with the first insertion?
Did I misunderstand?
LR