用c ++打印多维地图

时间:2015-12-10 23:43:02

标签: c++ vector maps

我在打印多维地图时遇到问题。我通过

初始化它
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英里。这是否可能,如果不是,我将如何改变它?

为了更好地了解我为什么使用地图,项目的要求是我从文件中读入所有信息,从该文件创建图表,然后让用户输入缩写他们想要开始的城市。地图允许我在数组中指定一个带有字符串的点,这对此很有用。但我不确定它是否适用于此算法。

2 个答案:

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