我想在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