在 C++ 中打印多维地图

Printing a multi-dimensional map in c++

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

初始化它
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 59miles。这甚至可能吗,如果不可能,我将如何改变它?

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

最简单的方法之一:

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,然后创建另一个循环遍历键。我不确定这是不是最快的方法,但肯定不会太慢。

std::vector<std::string> keys;

for(auto& kv : map)
{
    keys.push_back(kv.first);
}

for(auto s : keys)
{
    for(double d : map[s])
    {
    //..
    }
}
{
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"));
}
}

这是我用来打印地图的功能。感谢 Lucas 为我指明了正确的方向