检查模板类中是否已存在元素

问题描述 投票:0回答:1

我建立了一个名为Set的类,该类继承自称为ISet的基类,它看起来像这样。

template <class T>
class Set : public ISet<T>
{
public:
    Set();
    ~Set();
    Set(const Set &origin);
    Set operator=(const Set &origin);

    bool insert(T element);
    bool remove(T element);
    int size()const;

private:
    T *arr;
    int cap, nrOfElement;

    void deepCopy(const Set &origin);
    void freeMemory();
};

我现在应该构建一个名为insert的函数,当且仅当该元素尚不存在时,才应该插入一个T类型的元素。我在理解如何解决此问题时遇到了问题,因为T元素应该可以是任何类型。我已经尝试过类似的东西:

bool Set<T>::insert(T element)
{
    bool added = false;

    if (nrOfElement == 0)
    {
        this->arr[0] = element;
        this->nrOfElement++;
    }
    else
    {
        for (int i = 0; i < this->nrOfElement; i++)
        {
            if (this->arr[i] == element)
            {
                i = this->nrOfElement;
                added = true;
            }
        }
        if (added == false)
        {
            this->arr[nrOfElement++] = element;
        }
    }

    return added;
}

但是由于我尝试插入的某些类(如T)没有operator ==,因此它无法处理上面我尝试做的==操作。我应该尝试type_cast吗?或您如何解决这个问题?

c++ templates equality
1个回答
0
投票

两个

  1. 您的模板的文档仅适用于相等的相等类型或

  2. 将函数对象存储在模板类中,可用于比较对象。比较对象的类型必须是模板参数。您可以默认为std::equal<>,它将使用operator==。用户必须提供一个自定义比较对象才能使用具有非相等可比较类型的模板。

© www.soinside.com 2019 - 2024. All rights reserved.