繁体   English   中英

C ++ STL map.find()找不到我的东西

[英]C++ STL map.find() not finding my stuff

我构建了一个地图并用数据加载它。 如果我遍历所有元素,我看到它们都是有效的。 但是,find方法找不到我的项目。 我确定这是我做的蠢事。 这是片段:

// 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);

...

...后来....

_mapIter = _myMap.find(firstName); // returns map.end
_mapIter = _myMap.find("joe"); // returns map.end

我不明白为什么:(

由于密钥是char* ,因此它们将按地址进行比较,而不是按值进行比较,例如

char* a = "123";
char* b = new char[4];
memcpy(b, a, 4);
assert(a != b);

你应该使用一个std::string ,它有一个重载的<用于按值进行比较。

typedef std::map<std::string, Person*> mapType;
...

(可能你想使用Personshared_ptr<Person>作为值来避免内存泄漏。)

KennyTM的解决方案(std :: string,这是更好的解决方案)的替代方法是告诉map它需要使用strcmp() ,而不是< 但是, strcmp()的返回值不是std::map期望的,它需要一个布尔值。 所以你需要一个瘦的包装函数: return strcmp(a,b) < 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM