我正在构建一个庞大的消息队列,并且仅使用PUSH和POP,这样可以更有效地(向量或队列)以最大速度维护大数据
struct MQStruct {
wchar_t *serviceName;
int durability;
int msgType;
int msgHeader;
wchar_t *msgId;
wchar_t *payload;
int payloadSize;
int ttl;
int priority;
}MQStructObj;
vector<MQStruct> MQvector;
queue<MQStruct> MSQ;
int SendMessage(wchar_t *serviceName, int durability, int msgType, int msgHeader, wchar_t *msgId, wchar_t *payload, int payloadSize, int ttl, int priority) {
MQStructObj.serviceName=serviceName;
MQStructObj.durability=durability;
MQStructObj.msgType=msgType;
MQStructObj.msgHeader=msgHeader;
MQStructObj.msgId=msgId;
MQStructObj.payload=payload;
MQStructObj.payloadSize=payloadSize;
MQStructObj.ttl=ttl;
MQStructObj.priority=priority;
//Which one is better (Vector or Queue) in term of memory, speed and why
MSQ.push(MQStructObj);
//OR
MQvector.push_back(MQStructObj);
return 0;
}
答案 0 :(得分:16)
关于SO的队列/矢量/列表有很多讨论,你可以搜索和重用资源。简而言之:
std::queue
:如果您需要快速插入和删除它的开头和
结束; std::vector
std::list
由于您只对容器使用推送/弹出,因此std::queue
代替std::vector
是肯定的。
答案 1 :(得分:4)
使用std::vector
您无法有效地模拟队列 - 您可能只能从容器的一侧推送和POP。如果您需要实现消息队列,那么请使用队列,这就是它的意思。