如何在 C++ 中为两个参数的函数重载 [] 运算符?

How can I overload [] operator in C++ for a function of two args?

我有一个 class 优先级队列,其方法 push() 接受两个参数:值和优先级。

#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);

?

How can I overload [] operator in C++ for a function of two args?

下标运算符始终是二元运算符,即它始终有两个操作数。如果将下标定义为成员运算符,则左手操作数将为 *this,因此您只能再多一个操作数。

How can I overload [] operator for it to work like this:

queue[priority]=value;

在下标运算符重载中,return 一个指向 *this 的对象,并且具有调用 queue.push(priority, value).

的重载赋值运算符

您必须 return 类型,这将在 operator= 上执行 push,例如:

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}; }
};