实现Employee类的更好选择是什么?

时间:2014-11-09 00:22:40

标签: c++ vector

如何找到给定员工的StaffsManager?这是我的班级定义:

class Employee
{
private:
    int id;
    string name;
    vector<Employee> boss;
    vector<Employee> staffs;

public:
    void addStaff(Employee e)
    {
        staffs.push_back(e);
    }

    void setBoss(Employee e)
    {
        boss.push_back(e);
    }

    Employee getManager()
    {
        vector<Employee>::iterator itr;
        itr = boss.begin();
        return (*itr);
    }
};

为了找到员工,我正在遍历staffs向量。有什么更好的方法来实现这个?对于每位员工,将有一个Manager。所以使用vector作为老板/经理不是一个好选择,对吗?

1 个答案:

答案 0 :(得分:1)

即使这里的代码无法编译,因为你试图在自己内部使用一个类,这里​​的问题似乎确实是一个设计缺陷而不是其他任何东西(你可能能够通过使用指针解决当前的问题相反,但我建议你先重新考虑你的设计)。 各种员工之间的关系不是员工的属性,所以我会毫不犹豫地将其存储为班级成员。如果我出于某种原因,请使用您在此处的设计并存储员工类中员工之间的关系,那么我就不会按值存储员工对象的副本。按值存储副本会导致数据保持同步和一致的问题(如果员工之间存在大量关系,则更不用说空间利用率很低)。最好使用类似于员工对象的智能指针。

或者你可以改变你的设计。如果每个员工都拥有唯一的ID,那么您可以更好地将关系存储在员工类之外。您可以使用一些数据结构来实现这一点,基本上您有一些图表显示节点是员工的关系,边缘是关系。您可以在那里使用智能指针,也可以存储代表员工的唯一键。