【发布时间】:2011-08-14 08:09:29
【问题描述】:
我的代码一直有这个问题,寻找我看不到的错误。我有一张地图,地图我正在将关键字映射到值。
我的问题有时是在插入关键字 =“蓝色”时,值会插入“红色”的键中。
所以,而不是,
键:红色,值:obj1、obj2
键:蓝色,值:obj3、obj4
我明白了,
键:红色,值:obj1、obj2、obj4(obj4 应键入蓝色)
键:蓝色,值:obj3
不确定它是什么,因为相同版本的代码适用于我拥有的其他地图,它们只是没有那么多的键。
addKeywordsForObject(const Object* const object, int nKeywords, ...)
{
va_list keywords;
char *keyword;
va_start(keywords, nKeywords);
for (int i = 0; i < nKeywords; i++) {
keyword = va_arg(keywords, char*);
if(objectToKeywordMap.find(keyword) == objectToKeywordMap.end()) {
keywordObject = new ObjectSet();
keywordObject->insert(const_cast<Object* const>(object));
objectToKeywordMap.emplace(StringToObjectSetMap::value_type(keyword,keywordObject));
}
else {
keywordObject->insert(const_cast<Object* const>(object));
objectToKeywordMap.emplace(StringToObjectSetMap::value_type(keyword,keywordObject));
}
}
va_end(keywords);
}
【问题讨论】:
-
显示这些 char* 指针来自哪里,如何创建它们?看起来您不知道映射中的键是指针,而不是字符串,并且映射不会像字符串那样比较它们。
-
您没有显示密钥是如何存储在地图中的。
std::string和char*之间会有很大的不同!一个常见的问题是比较指针而不是字符串值。 -
我猜我漏掉了。键存储为字符串。地图是 map
。在地图中使用之前,我曾尝试使用 tempString 将 char* 关键字存储为字符串,但没有效果。