添加map <pair <int,int>,vector <object>&gt;进入BST,其中一对是关键

时间:2018-04-09 14:37:09

标签: c++ vector iterator maps binary-search-tree

所以我有一张地图,其中键是一对月份和年份,返回的值是矢量,它基本上是一个月/年的天气实例矢量。

注意: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。

2 个答案:

答案 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。