SQL select通常是如何实现的

2024-04-30

我有两节课

class PopulationMember
{
public:
    void operationOnThisMember1();
    void operationOnThisMember2();
    ...

private:

    Population* populaltion_;
}

class Population
{
public:
    void operationOnAllMembers1();
    void operationOnAllMembers2();
    ...
    void operationOnAllMembers100();

    void sortAllMembersCriterium1();
    void sortAllMembersCriterium2();
    ...
    void sortAllMembersCriterium100();

private:
    QVector<PopulationMember*> members_;
}

我想在我的框架中实现类似 SELECT 的功能。即只能对共享特定属性组合的成员执行操作。

到目前为止我想出了两种方法:

  1. 实现一个方法,该方法将返回一个由满足特定条件的成员组成的新 Population 对象。

    Popuation Popuation::select(bool (predicate*) (PopulationMember*));
    
  2. Add a

    bool selected_; 
    

    给每个 PopulationMember 标记。

如果我这样做1.没有办法实现选中数据的排序和删除。如果我这样做 2. 检查选择性会产生开销,我将不得不重新实现排序和其他算法以仅对选定的成员进行操作。

还有第三种更好的方法吗?


我采取的方法是将迭代器接口公开给整个集合。为了实现某种选择,我将使用迭代器适配器,例如采用一元谓词,它提供了范围的新视图。这样,既不会影响存储的对象,也不会产生创建单独集合的任何开销。如果您查看 Boost 的迭代器适配器,您可能已经获得了所需的大部分内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL select通常是如何实现的 的相关文章

随机推荐