修改std :: map的最后一次插入

时间:2014-01-21 19:41:43

标签: c++ map

在下面的示例中,我尝试向std::map插入一个元素并获取最后插入元素的迭代器,但是我无法修改它。

#include <map>

struct X {
    int x;
};

struct Y {
    int y;
};

int main()
{
    X x = {1};
    Y y = {2};

    std::map <X, Y> Z;
    std::pair<std::map<X, Y>::iterator,bool> lastval = Z.insert(std::pair<X, Y>(x, y));

    // Error: Expression must be a modifiable lvalue;
    lastval.first->first.x = 0;
}

我该怎么做?

1 个答案:

答案 0 :(得分:3)

std::map中的键(以及std::set的元素)是不可变的 - 您无法更改它们,因为这可能会改变排序并破坏地图。 std:map<K, V>类型的值实际上是std::pair<const K, V>。因此,在您的情况下,lastval.first->second可以更改,但lastval.first->first是只读的,因为它是const