如何作为整体访问地图的值

时间:2018-06-09 09:24:07

标签: c++

我有一个像这样的c ++地图:

std::map<int, int> points;

我知道我可以访问这两个整数,例如在像这样的for循环中

for (auto map_cntr = points.begin(); map_cntr != points.end(); ++map_cntr)
        {
          int A = map_cntr->first; // key
          int B = map_cntr->second; // val
        }

但我想知道我如何能够整体访问每个点(而不是像上面那样的条目)。

我想到这样的事情:

for (auto map_cntr = points.begin(); map_cntr != points.end(); ++map_cntr)
            {
              auto whole_point = points.at(map_cntr);
            }

实际上,我想对地图的一个条目(点)的整数进行操作,并使用地图的以下条目(点)的整数。

3 个答案:

答案 0 :(得分:4)

  

我想对地图的一个入口(点)的整数进行操作   使用地图的以下条目(点)的整数。

Map不适合执行操作的容器,具体取决于您要根据先前元素修改当前元素的元素序列。对于那些东西,你可以使用矢量或数组对。

答案 1 :(得分:1)

您可以使用foreach循环

std::map<int, int> points;

for (auto pair : points)
{
    // pair - is what you need
    pair.second;
    pair.first;
    auto whole_point = pair;

}

答案 2 :(得分:0)

  

我想对地图的条目(点)的整数进行操作,并使用地图的以下条目(点)的整数

您无法直接修改地图中[key,value]对的键​​。如果您需要这样做,则必须擦除该对并插入另一个。

如果你只需要写一对的值,或者只需要读取对,你就可以用一个迭代器来完成它,如下所示:

// assuming the map contains at least 1 element.
auto it = points.begin();

std::pair<const int, int>* currentPoint = &(*it);
it++;
for (; it != points.end(); ++it) {
    auto& nextPoint = *it;
    // Read-only: currentPoint->first, nextPoint.first
    // Read/write: currentPoint->second, nextPoint.second
    currentPoint = &nextPoint;
}

Live example