在下面的示例中,我尝试向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;
}
我该怎么做?
答案 0 :(得分:3)
std::map
中的键(以及std::set
的元素)是不可变的 - 您无法更改它们,因为这可能会改变排序并破坏地图。 std:map<K, V>
类型的值实际上是std::pair<const K, V>
。因此,在您的情况下,lastval.first->second
可以更改,但lastval.first->first
是只读的,因为它是const
。