我的代码一直遇到这个问题,找我的错误,我看不到它。我有一张地图,地图我将关键字映射到值
我的问题是有时当插入keyword =“Blue”时,该值将插入到“Red”键中
因此,而不是,
键:红色,值: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);
}
答案 0 :(得分:0)
最有可能的问题是,您没有为地图所具有的key type
定义排序功能。您需要“告诉”地图如何对索引类型
例如:
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;
如果您认为还缺少其他内容,请发表评论。
答案 1 :(得分:0)
我看不到keywordObject
的声明,所以我认为它是一个全球性的。将新对象添加到已存在的关键字的情况在else
中处理。在这种情况下keywordObject
的价值是多少?是谁设定的?
此代码还存在许多其他问题,其他问题在其他答案和评论中提及。
addKeywordsForObject
char*
作为需要特殊处理的地图密钥(不清楚,因为您没有显示StringToObjectSetMap
的声明)