将struct结构化为struct中的向量

时间:2012-12-01 20:00:06

标签: c++ vector struct push-back

我有以下结构:

enum messageType {New = 0, Old = 1, No_Message = 2};

typedef struct {
    enum messageType type;
    unsigned int senderID;
    char message[100];
} StoredMessageData;

struct StoredMessage {
    unsigned int recipientID;
    vector<StoredMessageData> messages;

    StoredMessage(const unsigned int& intRecipient = 0, const vector<StoredMessageData>& data = vector<StoredMessageData>())
    : recipientID(intRecipient), messages(data)
    {
        messages.reserve(10);
    }

    bool operator<(const StoredMessage& compareTo) const
    {
        return recipientID < compareTo.recipientID;
    }

    bool operator==(const StoredMessage& compareTo) const
    {
        return recipientID == compareTo.recipientID;
    }
};

在我的主要方法中,在某些时候我收到一条消息,并希望将其存储起来:

if(msgs.find(rcvdRecipientID) == msgs.end())
{
    StoredMessage storedMsg;
    storedMsg.recipientID = rcvdRecipientID;
    msgs.insert(storedMsg);
}

set<StoredMessage>::iterator it = msgs.find(rcvdRecipientID);
StoredMessage storedMsg = *it;

StoredMessageData data;
data.type = New;
data.senderID = rcvdSenderID;
strcpy(data.message, rcvdMessage);

storedMsg.messages.push_back(data);

如果在push_back()之后调用storedMsg.messages.size(),我的值为1.这对我来说很有意义。

但是,稍后,我想知道我存储了多少条消息,所以,这段代码:

StoredMessage storedMsg;
if(msgs.find(rcvdSenderID) != msgs.end())
{
    storedMsg = *(msgs.find(rcvdSenderID));
    cout << "Number of stored messages to send: " << int(storedMsg.messages.size()) << endl << endl;
    ...

这里,storedMsg.messages.size()返回0,即使使用了与之前相同的ID ...我很困惑为什么会发生这种情况并怀疑它与被复制的向量有关,因为它们的大小不同,但我不确定。我不是C ++专家,所以请保持温和。 谢谢!

1 个答案:

答案 0 :(得分:2)

可能是因为这里发生了

StoredMessage storedMsg = *it;

您可以创建对象的副本并对副本执行所有修改。