将map<pair<int,int>,vector<Weather>>插入自定义BST时出现异常
问题分析与修正方案
首先,你的代码里有两个关键错误导致运行/编译失败,我来一步步帮你解决:
1. 错误的Insert参数构造
你写的 monthBST.Insert(map<make_pair(month,year),monthVec>); 完全不符合C++语法:
map<...>是容器类型的模板声明,不是用来构造单个键值对的方式。你这里需要的是一个键值对对象(和monthMap里存储的元素类型一致:pair<pair<int,int>, vector<Weather>>),而不是构造一个新的map容器。
2. 变量未声明(潜在问题)
循环里使用的month、year、monthVec如果没有提前声明类型,会触发编译错误,需要先声明这些变量。
修正后的代码
根据你的需求,这里有两种常见的修正方式,取决于你自行实现的BST的Insert函数签名:
情况1:BST的Insert接受完整的键值对(即pair<pair<int,int>, vector<Weather>>类型)
// 先声明需要用到的变量 int month, year; vector<Weather> monthVec; for (map<pair<int, int>, vector<Weather>>::iterator it = monthMap.begin(); it != monthMap.end(); ++it) { month = it->first.first; year = it->first.second; monthVec = it->second; // 直接传递迭代器指向的键值对对象 monthBST.Insert(*it); }
情况2:BST的Insert接受分开的键和值(比如Insert(const pair<int,int>& key, const vector<Weather>& value))
int month, year; vector<Weather> monthVec; for (map<pair<int, int>, vector<Weather>>::iterator it = monthMap.begin(); it != monthMap.end(); ++it) { month = it->first.first; year = it->first.second; monthVec = it->second; // 分别传递键和值 monthBST.Insert(it->first, it->second); }
额外说明
如果你确实需要手动构造键值对(而不是直接用*it),可以用make_pair来生成:
pair<pair<int,int>, vector<Weather>> entry = make_pair(make_pair(month, year), monthVec); monthBST.Insert(entry);
这种写法和直接用*it效果完全一致,只是更显式而已。
内容的提问来源于stack exchange,提问作者Aashish Pandav
相关产品推荐
相关产品推荐

