以下程序有什么问题,为什么我无法用类初始化地图作为键
n
在上面的程序中,如果我尝试将键添加为类,则会出错。 请告诉我们初始化地图的不同方法。
答案 0 :(得分:5)
std::map
的value_type
为std::pair<const Key, T>
,表示密钥保存为const
。所以你不能像std::cout<<it->first.getId()
那样调用非const成员函数。
您应该将User::getId()
(和User::getUid()
)更改为const成员函数。如:
int getId() const {
// ~~~~~
return value_1;
}
int getUid() const {
// ~~~~~
return value_2;
}
顺便说一句:if
中operator<
条件失败时,您没有返回任何内容。
bool operator< (const User& userObj) const
{
if(userObj.value_1 < this->value_1)
return true;
else
return false; // return for else case
}
或只是
bool operator< (const User& userObj) const
{
return userObj.value_1 < this->value_1;
}
答案 1 :(得分:1)
首先,您应该让您的运算符始终返回一个值:
bool operator< (const User& userObj) const
{
return userObj.value_1 < this->value_1;
}
您确定要将x < y
与y.value < x.value
进行比较吗?否则,您需要更改内部比较:
bool operator< (const User& userObj) const
{
return this->value_1 < userObj.value_1;
}
在写这个答案的时候,第二部分的歌曲要比我快,所以看看他的答案......