I have constructed a map and loaded it with data. If I iterate over all the elements I see they are all valid. However, the find method doesn't find my item. I'm sure it's something stupid I am doing. Here is snippet:
// definitions
// I am inserting a person class and using the firstname as the key
typedef std::map<char*,Person *> mapType;
mapType _myMap;
mapType::iterator _mapIter;
...
Person *pers = new Person(FirstName, LastName, Address, Phone);
_myMap.insert(make_pair(pers->firstName, pers);
...
...later....
_mapIter = _myMap.find(firstName); // returns map.end
_mapIter = _myMap.find("joe"); // returns map.end
and I have no idea why :(
Since the key is char*
, they will be compared by address, not by value, e.g.
char* a = "123";
char* b = new char[4];
memcpy(b, a, 4);
assert(a != b);
You should use a std::string
, which has an overloaded <
for comparison by value.
typedef std::map<std::string, Person*> mapType;
...
(And probably you want to use a Person
or shared_ptr<Person>
as the value to avoid memory leak.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With