私は次の構造体を持っています:
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() は、以前と同じ ID が使用されている場合でも 0 を返します...なぜこれが起こっているのか混乱しており、サイズが異なるためコピーされるベクトルに関係していると思われますが、私はわからない。私は C++ の専門家ではないので、お手柔らかにお願いします。ありがとうございました!