在堆栈的自定义实现中重载==运算符

时间:2015-07-19 14:29:42

标签: c++ stack

我正在尝试实现一个始终返回min元素的自定义堆栈。因此,我有效地维持了两个堆栈。我已经在我的自定义堆栈中实现了push方法,但感觉实现pop的有点不知所措。理想情况下,我正在尝试为==运算符编写自定义重载两个比较两个节点。 这是我的节点实现。

template<typename T> class stack;
template<typename T> class node{
friend class stack<T>;
public:
    node():T(NULL),next(NULL){}
    node(T data):data(data), next(NULL){}
private:
    T data;
    node<T>* next;

};

这是我的堆栈推送和弹出

void push(T item){
        node<T>* N = new node<T>(item);

        if(top == nullptr){
            top = N;
            min_top = N;
            ++elements;
            return;
        }
        if(item < min_top->data) N->next = min_top;
        min_top = N;
        N->next = top;
        top = N;
        ++elements;
    }

........... ...........

T pop(){
        if(top == nullptr)throw std::runtime_error("stack empty");

        T item = top->data;
        node<T>* P = top;
        top = P->next;
        delete P;
        --elements;
        return item;

    }

这是我为等于重载定义的方法签名。

bool operator==(const node<T>& other){

    }

想法是弹出min_stack的最小元素(最小堆栈的顶部),如果它与主堆栈的顶部相同。

1 个答案:

答案 0 :(得分:1)

如果您已经拥有operator<(任何类型的有序集合都需要),那么就有一种正确定义operator==的模式:

bool operator==(const node<T>& other) const
{
    if (*this < other) return false;
    if (other < *this) return false;
    return true;
}

或者您可以使用std::less

使其更加通用
bool operator==(const node<T>& other) const
{
    using std::less;
    if (less(*this, other)) return false;
    if (less(other, *this)) return false;
    return true;
}