c++ - 如何在 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);
?
解决方案
您必须返回将执行push
on的类型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}; }
};
推荐阅读
- angular - 使用ngProjectAs时,Clarity datagrid如何替换一行?
- javascript - 无法在开玩笑的异步函数中运行测试
- tcp - Hyperledger Fabric:sendPeersProposal - 承诺被拒绝:错误:14 不可用:TCP 读取失败
- c++ - 不同的结果导致运算符的优先级改变
- php - 需要用数据数组过滤mysql中的数据
- java - 什么是 Java 中的扫描仪跳过以及为什么要使用它?
- python - 从python中的列表中删除单词
- javascript - React 合成事件与原生 Javascript 事件?
- java - 无法设置 com.mysql.jdbc.Blob
- ios - 快速按钮按下动作两次加载 tableview 控制器