C++ 访问包含向量对的映射的值

C++ 访问包含向量对的映射的值,c++,dictionary,vector,std-pair,C++,Dictionary,Vector,Std Pair,我声明了一个包含向量对的映射,如 typedef vector<pair<string,int>> vectorPair; map<string,vectorPair> mapName; typedef矢量对; 地图名称; 我一直在尝试使用迭代器遍历映射,但对于如何从迭代器->第一个或迭代器->第二个访问向量对,我感到困惑。有更好的方法吗?我不知道您想要实现什么,但我假设您有一个类似以下内容的结构: for(auto i = mapName.begin()

我声明了一个包含向量对的映射,如

typedef vector<pair<string,int>> vectorPair;
map<string,vectorPair> mapName;
typedef矢量对;
地图名称;

我一直在尝试使用迭代器遍历映射,但对于如何从迭代器->第一个或迭代器->第二个访问向量对,我感到困惑。有更好的方法吗?

我不知道您想要实现什么,但我假设您有一个类似以下内容的结构:

for(auto i = mapName.begin(); i != mapName.end(); i++)
{

}
for(auto i = mapName.begin(); i != mapName.end(); i++)
{
    for(auto j = i->second.begin(); j != i->second.end(); j++)
    {

    }
}
在这个循环中,你只想访问向量?这将使用
i->second
完成。如果您不喜欢这种语法,您可以始终使用引用(类似于
auto&vec=i->second
,然后只使用
vec

如果要迭代向量本身中的对,则需要使用如下内容:

for(auto i = mapName.begin(); i != mapName.end(); i++)
{

}
for(auto i = mapName.begin(); i != mapName.end(); i++)
{
    for(auto j = i->second.begin(); j != i->second.end(); j++)
    {

    }
}

这里有一个整洁的方法来遍历地图:

for (auto x : mapName)
{
    vectorPair& vp = x.second;        // or auto&
    ...
}

位于

的实时演示显示试图在MAPI中进行迭代的代码如果编译器有可用的自动,那么它也有可用的,因此您应该使用它,而不是直接使用迭代器:
for(auto&v:mapName){for(auto&p:v.second){/*根据需要使用p…*/}