我在打印多维地图时遇到问题。我通过
初始化它map<string, map<string, vector<double>>> mapData;
void Graph::addToGraph(string start, string next, double cos, double mile)
{
//see if the map contains the starting city string, add if not found
if (mapData.find(start) == mapData.end())
{
mapData[start][start].push_back(invalid);
mapData[start][start].push_back(invalid);
}
//see if the map contains the next city string, add if not found
if (mapData.find(next) == mapData.end())
{
mapData[next][next].push_back(invalid);
mapData[next][next].push_back(invalid);
}
mapData[start][next].push_back(cos);
mapData[start][next].push_back(mile);
double check = mapData[start][next][0];//test case
}
据我所知,在我看来地图已经正确创建。我使用了第三个维度,因此我可以存储里程和价格。这将用于最短路径算法。我想打印每个城市,以及所有到达城市的转机航班的里程和价格示例,SFA SLC 700美元59英里。这是否可能,如果不是,我将如何改变它?
为了更好地了解我为什么使用地图,项目的要求是我从文件中读入所有信息,从该文件创建图表,然后让用户输入缩写他们想要开始的城市。地图允许我在数组中指定一个带有字符串的点,这对此很有用。但我不确定它是否适用于此算法。
答案 0 :(得分:2)
{
for (auto kv : mapData)
{
for (auto kvv : kv.second)
{
if (kvv.second != invalid)
{
cout << kv.first << "<-->" << kvv.first;
cout << " costs $" << kvv.second << endl;
}
}
cout << distance(mapData.begin(), mapData.find("SLC"));
}
}
这是我用来打印地图的功能。感谢卢卡斯指出我正确的方向
答案 1 :(得分:1)
最简单的方法之一:
df <- expand.grid(x = 1:20, y = 1:20)
samples <- c("one", "two", "three", "four", "five")
df$series <- samples[runif(n = nrow(df), min=1,max=length(samples))]
g <- ggplot(df, aes(fill=series, xmin = x, ymin = y, xmax = x+1, ymax = y+1))
g <- g + geom_rect()
g <- g + coord_polar(theta="y")
g <- g + theme(panel.grid=element_blank())
g <- g + theme(axis.text=element_blank())
g <- g + theme(axis.ticks=element_blank())
g
如果您在循环播放数据时正在对数据执行其他操作,则可以在循环内创建密钥向量和for(auto& kv : map)
{
std::cout << kv.first << std::endl;
std::cout << kv.second.first << std::endl;
for(double d : kv.second.second
{
//..
}
//..
}
push_back()
,然后创建另一个循环遍历键。我不确定这是最快的方式,但它肯定不会太慢。
kv.first