C++ 从映射复制到指针列表
我有一个有趣的作业,其中我有一个C++ 从映射复制到指针列表,c++,stdmap,stdlist,C++,Stdmap,Stdlist,我有一个有趣的作业,其中我有一个std::mapofCTurist(上一个类)和无符号变量。代码如下: class CTurist { protected: string tName; int age; public: CTurist() {}; CTurist(string name, int age2) { tName = name; age = age2; } bool operator<
std::map
ofCTurist
(上一个类)和无符号变量。代码如下:
class CTurist
{
protected:
string tName;
int age;
public:
CTurist() {};
CTurist(string name, int age2)
{
tName = name;
age = age2;
}
bool operator<(const CTurist& e) const
{
return age < e.age;
}
friend ostream& operator<<(ostream& os, const CTurist&& e);
friend ifstream& operator>>(ifstream& is, CTurist&& e);
};
class CHotel:public CTurist
{
protected:
string hName;
int stars;
int beds;
map<CTurist, unsigned> Turisti;
public:
unsigned Sum = 0;
CHotel(){};
CHotel(string hName2, int zvezdi, int legla)
{
hName = hName;
stars = zvezdi;
beds = legla;
}
int Compare()
{
list<CTurist*> list;
int br=0;
CTurist vyzrast;
map<CTurist, unsigned>::iterator it = Turisti.begin();
while (it != Turisti.end())
{
if (it->first < vyzrast)
{
br++;
}
else
{
list.push_back(std::move(&it->first));
}
}
}
};
class-CTurist
{
受保护的:
字符串名称;
智力年龄;
公众:
CTurist(){};
CTurist(字符串名,int age2)
{
tName=名称;
年龄=2岁;
}
布尔运算符第一次first));
}
}
}
};
我知道这是一个很长的问题,但我认为最好把所有的信息都告诉你
现在,底部的int Compare()
函数是导致我出现问题的函数
我必须检查游客的年龄是否高于或低于我在这里称之为vyzrast
的参数。我们正在比较年龄。如果它在下面,它是非常直接的
如果是上面的话,我必须把这些游客添加到一个列表中。指向指针列表。如果我从对象而不是指针创建列表。这方面运气不好,因此我在这里寻找如何修复它的建议。为什么要对运算符重载使用右值引用?您应该为操作符使用const-CTurist&
。对于操作员>
,您应该使用std::istream
:
friend ostream& operator<<(ostream& os, const CTurist &e);
friend istream& operator>>(istream& is, CTurist &e);
“我知道这很长,但我认为最好给你所有的信息”-你是对的,这确实是不必要的长。请创建一个简短得多的示例(只是再现问题的最小值)。这样做的时候,你可能会发现你需要做什么;-)@耶菲克:简称。不清楚为什么你会从一个CTourist
衍生出CHotel
,而你的酒店里却保存着游客名单?关于指针的具体问题:指针必须指向某些东西(在您的例子中是对象)。如果指针没有指向的对象,就不能只有指针。list
应该包含什么?指向CTursit
s的指针,其年龄小于vyzrast
?@YePhIcK,这与以前不同。谢谢你的注意。根据你说的判断,我做了这个:CTurist*baba=新CTurist(it->first);列表。推回(标准::移动(baba));还值得一提的是,使用裸指针是一个可怕的想法,尤其是对新手来说。而且从来没有一个很好的理由让数据成员受到保护(虽然受保护的成员函数非常好而且有用),非常感谢。很明显,我只是这门语言的新手,这种帮助非常有用。作为将来的参考,如果我想使用一个列表而不是常量,我会怎么做呢?指针与列表和地图结合在一起,对我来说真的是一种暗物质。@TimothyY使用const
有什么不对?这就是map
实际存储的内容,因此指向其键的指针需要匹配。否则,您可以将const\u转换为const
,但这不是一个好主意。@RemyLebeau,很抱歉反应太晚了。不,没有错,我只是想看看是否有这样做的选择,你确实解释过。再次感谢。
int Compare()
{
std::list<const CTurist *> clist;
int br = 0;
CTurist vyzrast("", SomeAgeValueHere);
std::map<CTurist, unsigned>::iterator it = Turisti.begin();
while (it != Turisti.end())
{
if (it->first < vyzrast)
{
br++;
}
else
{
clist.push_back(&it->first);
}
++it;
}
// use clist as needed...
return SomeValueHere;
}