嵌套 Map 迭代器
Nested Map iterators
我有以下代码:
int main()
{
typedef std::map<int,int> monthMap;
typedef std::map<int,std::map<int, monthMap>> yearMap;
//std::ifstream inputFile("MetData-31-3.csv");
//std::ifstream inputFile("MetData_Mar01-2015-Mar01-2016-ALL.csv");
//if(!inputFile) return -1;
//readFile(inputFile, yearMap);
int year = 2011, month = 4;
yearMap ym;
monthMap mm;
ym[year][month];
yearMap::iterator yearItr = ym.find(year);
if(yearItr != ym.end())
{
//monthMap &mp = yearItr->second;
monthMap::iterator monthItr;
monthItr = (yearItr->second).find(month);
if(monthItr != yearItr->second.end())
{
std::cout << "Found!";
}
}
}
基本上我想做的是为我的项目设置基础,从 CSV 文件中读取数据中心的日期、时间、风速和辐射水平等信息。
我的其他项目中的所有内容都作为矢量工作,但是我需要切换数据结构并在项目中实现 BST 和 Map。
我的设计策略是这样的:
有一个多年的地图
其中包含月份地图
其中包含几天的 BST
其中包含 WindData 对象的向量
其中包含风速、时间、辐射等所有要素
首先,这是最好的设置方式吗?在这个阶段我真的想不出替代方案。
但我 运行 这里的主要问题是如何实际遍历嵌套映射,我从这段代码中得到以下错误
D:\Projects\testProj\main.cpp|31|error: no match for 'operator=' (operand types are 'std::map<int, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const int, int> >}' and 'std::map<int, std::map<int, int> >::iterator {aka std::_Rb_tree_iterator<std::pair<const int, std::map<int, int> > >}')|
对我来说,将此数据结构用于此类流程似乎非常笨重、丑陋和缓慢,但我必须这样做,我愿意接受任何关于存储和处理此数据的不同方法的建议给出的数据我仍在使用 MAP 和 BST。
变化:
monthMap::iterator monthItr;
monthItr = (yearItr->second).find(month);
收件人:
std::map<int, monthMap>::iterator monthItr;
monthItr = (yearItr->second).find(month);
但是,AAA 会节省您的时间和精力:
int main(){
typedef std::map<int,int> monthMap;
typedef std::map<int,std::map<int, monthMap>> yearMap;
int year = 2011, month = 4;
yearMap ym;
monthMap mm;
ym[year][month];
auto yearItr = ym.find(year);
if(yearItr != ym.end()){
auto monthItr = (yearItr->second).find(month);
if(monthItr != yearItr->second.end())
{
std::cout << "Found!";
}
}
}
我有以下代码:
int main()
{
typedef std::map<int,int> monthMap;
typedef std::map<int,std::map<int, monthMap>> yearMap;
//std::ifstream inputFile("MetData-31-3.csv");
//std::ifstream inputFile("MetData_Mar01-2015-Mar01-2016-ALL.csv");
//if(!inputFile) return -1;
//readFile(inputFile, yearMap);
int year = 2011, month = 4;
yearMap ym;
monthMap mm;
ym[year][month];
yearMap::iterator yearItr = ym.find(year);
if(yearItr != ym.end())
{
//monthMap &mp = yearItr->second;
monthMap::iterator monthItr;
monthItr = (yearItr->second).find(month);
if(monthItr != yearItr->second.end())
{
std::cout << "Found!";
}
}
}
基本上我想做的是为我的项目设置基础,从 CSV 文件中读取数据中心的日期、时间、风速和辐射水平等信息。
我的其他项目中的所有内容都作为矢量工作,但是我需要切换数据结构并在项目中实现 BST 和 Map。
我的设计策略是这样的: 有一个多年的地图 其中包含月份地图 其中包含几天的 BST 其中包含 WindData 对象的向量 其中包含风速、时间、辐射等所有要素
首先,这是最好的设置方式吗?在这个阶段我真的想不出替代方案。
但我 运行 这里的主要问题是如何实际遍历嵌套映射,我从这段代码中得到以下错误
D:\Projects\testProj\main.cpp|31|error: no match for 'operator=' (operand types are 'std::map<int, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const int, int> >}' and 'std::map<int, std::map<int, int> >::iterator {aka std::_Rb_tree_iterator<std::pair<const int, std::map<int, int> > >}')|
对我来说,将此数据结构用于此类流程似乎非常笨重、丑陋和缓慢,但我必须这样做,我愿意接受任何关于存储和处理此数据的不同方法的建议给出的数据我仍在使用 MAP 和 BST。
变化:
monthMap::iterator monthItr;
monthItr = (yearItr->second).find(month);
收件人:
std::map<int, monthMap>::iterator monthItr;
monthItr = (yearItr->second).find(month);
但是,AAA 会节省您的时间和精力:
int main(){
typedef std::map<int,int> monthMap;
typedef std::map<int,std::map<int, monthMap>> yearMap;
int year = 2011, month = 4;
yearMap ym;
monthMap mm;
ym[year][month];
auto yearItr = ym.find(year);
if(yearItr != ym.end()){
auto monthItr = (yearItr->second).find(month);
if(monthItr != yearItr->second.end())
{
std::cout << "Found!";
}
}
}