【发布时间】:2016-08-01 06:50:01
【问题描述】:
下面的程序有什么问题,为什么我不能用类作为键来初始化地图
#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;
}
在上面的程序中,如果我尝试将键添加为类,则会出错。 并请告诉不同的方式来初始化地图。
【问题讨论】:
-
如果我尝试初始化地图,例如:m_UserInfoMap[a] = 1;它工作正常”但是如果 std::map
m_UserInfoMap = (a,1); 或 std::map m_UserInfoMap (a,1); 它不工作,所以穿什么以上说法? -
我们不会再次做你的编译器的工作。发布错误。
-
提高警告级别。你犯了一个小错误:非 void 函数 always 必须返回一些东西。
-
你在说哪个非 void 函数?我在询问地图插入部分中的 make_pair 函数。
-
你只定义了三个函数。阅读它们并找出问题所在。
标签: c++ dictionary stl