Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从映射复制到指针列表_C++_Stdmap_Stdlist - Fatal编程技术网

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
of
CTurist
(上一个类)和
无符号变量。代码如下:

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;
}