所以我有一张地图,其中键是一对月份和年份,返回的值是矢量,它基本上是一个月/年的天气实例矢量。
注意:BST由我而不是STL BST制作。
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(map<make_pair(month,year),monthVec>);
}
然而,它返回了一堆错误,所有错误都与我在常量表达式中没有任何错误有关(make_pair,month,year,function call,monthVec)
main.cpp|170|error: 'std::make_pair(_T1, _T2)' cannot appear in a constant-expression|
main.cpp|170|error: 'month' cannot appear in a constant-expression|
main.cpp|170|error: 'year' cannot appear in a constant-expression|
main.cpp|170|error: a function call cannot appear in a constant-expression|
main.cpp|170|error: 'monthVec' cannot appear in a constant-expression|
main.cpp|170|error: template argument 1 is invalid|
main.cpp|170|error: template argument 2 is invalid|
main.cpp|170|error: template argument 3 is invalid|
main.cpp|170|error: template argument 4 is invalid|
我尝试了很多东西,似乎无法弄明白。
最终目标是拥有一个BST,它将自我平衡(因为已排序的数据),并且找到密钥,它返回与之关联的monthVec。
答案 0 :(得分:0)
根据您的代码,您似乎想要这样的内容:
typedef std::map<std::pair<int, int>, std::vector<Weather>> WeatherMap;
// for (const auto& itr : monthMap) // This is a bit cleaner
for (auto itr = monthMap.begin(); itr != monthMap.end(); ++it)
{
WeatherMap newMap;
newMap.insert(*itr);
monthBST.Insert(std::move(newMap));
}
根据你的解释,这并没有多大意义,所以你可能真的想要这样的东西:
typedef std::map<std::pair<int, int>, std::vector<Weather>> WeatherMap;
for (auto itr = monthMap.begin(); itr != monthMap.end(); ++it)
{
monthBST.Insert(*itr);
}
答案 1 :(得分:0)
当您需要多个值作为关键时,最好使用multimap。