如何在 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}; }
};
我有一个 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}; }
};