9

我正在构建一个大型消息队列并仅使用 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;
}
4

2 回答 2

20

SO上有很多关于队列/向量/列表的讨论,您可以搜索和重用资源。简而言之:

  • 用途std::queue:如果您需要在其开头和结尾处快速插入和删除;
  • std::vector如果您需要随机访问元素,请使用
  • 当您需要从序列中间频繁插入和删除时std::list

当您仅使用推送/弹出到容器时,std::queue这是一种方式而不是std::vector肯定的方式。

您可以从以下网址获取更多详细信息:http ://en.cppreference.com/w/cpp/container

于 2013-01-15T10:39:18.240 回答
4

std::vector您无法有效地模拟队列 - 您只能从容器的一侧推送和弹出。如果您需要实现消息队列然后使用队列,这就是它的意思。

于 2013-01-15T10:38:48.417 回答