首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++ STL map.find()找不到我的东西

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

Stack Overflow用户
提问于 2010-05-14 21:10:47
回答 2查看 3.1K关注 0票数 4

我已经构建了一个地图,并在其中加载了数据。如果我遍历所有元素,我会发现它们都是有效的。但是,find方法并不能找到我的项目。我敢肯定这是我在做的愚蠢的事情。以下是代码片段:

代码语言:javascript
复制
// 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...

代码语言:javascript
复制
_mapIter = _myMap.find(firstName); // returns map.end
_mapIter = _myMap.find("joe"); // returns map.end

我不知道为什么:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-14 21:14:35

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

代码语言:javascript
复制
char* a = "123";
char* b = new char[4];
memcpy(b, a, 4);
assert(a != b);

您应该使用具有重载<std::string,以便通过值进行比较。

代码语言:javascript
复制
typedef std::map<std::string, Person*> mapType;
...

(您可能希望使用Personshared_ptr<Person>作为值,以避免内存泄漏。)

票数 14
EN

Stack Overflow用户

发布于 2010-05-14 21:26:35

KennyTM的解决方案(std::string,这实际上是更好的解决方案)的替代方案是告诉map它需要使用strcmp(),而不是<。然而,strcmp()的返回值并不是std::map所期望的,它需要一个布尔值。因此您需要一个简单的包装器函数:return strcmp(a,b) < 0;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2834362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档