【发布时间】:2017-07-07 10:55:08
【问题描述】:
我的示例代码是
class A
{
int a = 0;
public:
void setA(const int value)
{
a = value;
}
};
std::map<std::string, std::set<A>> Map{{"A", {}}};
Map.rbegin()->second.rbegin()->setA(2);
我收到以下错误:“成员函数 'setA' 不可行:'this' 参数的类型为 'const A',但函数未标记为 const”
我的问题是为什么 rbegin() 返回一个指向 A 的 const 指针?或者为什么std:pair的第二个是std::map中的常量?
【问题讨论】:
-
因为
std::map是一个树形结构。在不破坏结构本身的情况下,您无法更改其元素的值。试试std::map<int, int>。 (顺便说一句,std::set也是如此。) -
感谢您的回复。即使,我可能只需要修改该对的第二个(值)?在那种情况下,树的结构不会失效吧?
-
你可以修改set,但不能通过它的迭代器修改set的内容。您的集合中也没有任何元素(您需要使用额外的 {} 初始化
Map{{"A", {{}}}}) -
您可以使用 operator[] 更改与键关联的值。
-
在构建minimal reproducible example 时,您应该已经发现地图是无关紧要的。