首页 > 解决方案 > 如何在 C++ 中为两个 args 的函数重载 [] 运算符?

问题描述

我有一个带有方法 push() 的类 Priority Queue,它需要两个参数:值和优先级。

#include <vector>
#include <iostream>

class PriorityQueue
{
private:
    std::vector<std::pair<int, int>> _queue;

public:
    int top();
    int pop();
    void push(int, int);
    int size();
    PriorityQueue();
    PriorityQueue(int, int);
    friend std::ostream& operator<<(std::ostream&, PriorityQueue&);
};

如何重载 [] 运算符以使其像这样工作:

queue[priority]=value;

应该是什么意思

queue.push(priority, value);

?

标签: c++overloadingoperator-keyword

解决方案


您必须返回将执行pushon的类型operator=,例如:

class PriorityQueue
{
private:
    std::vector<std::pair<int, int>> _queue;

    struct Proxy
    {
        PriorityQueue* queue;
        int priority;

        Proxy& operator=(int value) { queue->push(priority, value); return *this; }
    };

public:
    // ...
    Proxy operator[](int priority) { return {this, priority}; }
};

推荐阅读