我想在C++中为char []缓冲区实现minHeap,并且正面临着实现的一些问题。我的优先级队列的声明如下(我不知道这会给我一个maxHeap或minHeap):定义用于priority_queue的自定义比较器
priority_queue<char[], vector<char[]>, comparePacketContents> receiveBuffer;
其中comparePacketContents
是:
struct comparePacketContents {
bool operator()(char lhs[], char rhs[]) const {
return atoi(TcpPacket::getBytes(lhs, 0, SEQUENCE_SIZE)) < atoi(TcpPacket::getBytes(rhs, 0, SEQUENCE_SIZE));
}
};
和TcpPacket::getBytes
是:
char* TcpPacket::getBytes(char* buf, int start, int size) {
char* ans = (char *) malloc(sizeof(char)*size);
for (int i = 0; i < size; i++) {
*(ans + i) = *(buf + start + i);
}
return ans;
}
基本上我打算获取接收到的数据包的第一个SEQUENCE_SIZE
字符,然后创建一个堆的顺序值th e序列号。
然而,当我试图推动一个包到这个堆使用:
receiveBuffer.push(buf);
它给了我下面的错误:
no instance of overloaded function "std::priority_queue<_Ty, _Container, _Pr>::push [with _Ty=char [], _Container=std::vector<char [], std::allocator<char []>>, _Pr=comparePacketContents]" matches the argument list
argument types are: (char [2048])
object type is: std::priority_queue<char [], std::vector<char [], std::allocator<char []>>, comparePacketContents>
我应该怎么做才能解决这个问题?
作为一个方面说明,你的代码充满了内存泄漏。我会高度推荐使用'std :: string'来代替'char []'。 –
当你用'push()'调用'buf'时,是什么类型的? –
@JohnZwinck'char [0123]' – akhiljain