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 () я вызываю storeMsg.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;
...

Здесь storeMsg.messages.size () возвращает 0, даже если используется тот же идентификатор, что и раньше … Я не понимаю, почему это происходит, и подозреваю, что это связано с копируемыми векторами, поскольку их размер изменяется, но я Я не уверен. Я не эксперт C ++, поэтому, пожалуйста, будьте осторожны.
Спасибо!

1

Решение

Вероятно, это происходит потому, что здесь

StoredMessage storedMsg = *it;

Вы создаете копию объекта и делаете все изменения в копии.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]