繁体   English   中英

map 将键值插入错误的键?

[英]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的声明)
  • 一个 function 使用省略号获取可变数量的参数(在 C++ 中几乎从来都不是一个好主意)
  • 在适合局部变量的情况下使用全局变量

暂无
暂无

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

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