[英]map inserting key values into wrong key?
我的代码一直有这个问题,寻找我看不到的错误。 我有一个 map,map 我正在将关键字映射到值。
我的问题是有时在插入关键字 =“蓝色”时,值会插入“红色”的键中。
所以,而不是,
键:红色,值:obj1,obj2
键:蓝色,值:obj3、obj4
我明白了,
Key: Red, Value: 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);
}
最有可能的问题是您没有为您的 map 拥有的key type
定义您的排序 function。 您需要“告诉” map如何对索引类型进行排序
例如:
struct sortKey{
bool operator()(key_type const& k1, key_type const& k2){
//define your sort criteria here
}
}
std::map<key_type,value_type,sortKey> the_map;
如果您认为还有其他遗漏,请发表评论。
我没有看到keywordObject
的声明,所以我假设它是一个全局的。 将新的 object 添加到已经存在的关键字的情况在else
中处理。 在这种情况下, keywordObject
的值是多少? 谁设置的?
此代码还有许多其他问题,其他答案和评论中提到了一些问题。
addKeywordsForObject
缺少返回类型char*
用作需要特殊处理的 map 键(不清楚,因为您没有显示StringToObjectSetMap
的声明)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.