下面的程序有什么问题,为什么我不能用类作为键来初始化 map
#include <iostream>
#include <map>
#include <utility>
using namespace std;
class User
{
int value_1;
int value_2;
public:
User( int num_1, int num_2)
{
value_1 = num_1;
value_2 = num_2;
}
int getId(){
return value_1;
}
int getUid(){
return value_2;
}
bool operator< (const User& userObj) const
{
if(userObj.value_1 < this->value_1)
return true;
}
};
int main()
{
std::map<User, int> m_UserInfoMap;
m_UserInfoMap.insert(std::make_pair<User, int>(User(1,2), 100) );
m_UserInfoMap.insert(std::make_pair<User, int>(User(3,4), 120) );
m_UserInfoMap.insert(std::make_pair<User, int>(User(5,6), 300) );
std::map<User, int>::iterator it = m_UserInfoMap.begin();
for(; it != m_UserInfoMap.end(); it++)
{
std::cout<<it->first.getId()<<" :: "<<it->second<<std::endl;
}
return 0;
}
在上面的程序中,如果我尝试将 key 添加为一个类,则会出错。 并请告知初始化 map 的不同方法。
最佳答案
std::map
的 value_type
是std::pair<const Key, T>
, 表示 key 保存为 const
.所以你不能像std::cout<<it->first.getId()
那样调用非常量成员函数.
你应该改变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;
}
关于c++ - 如何在 C++ 的 map STL 中将键作为类插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38692580/