Карта C++ вставляется неправильно
Я пытаюсь заполнить карту из следующих структур:
struct CounterParty
{
uint8_t firm_id;
char trader_tag[3];
uint32_t qty;
};
struct OrderFillMessage
{
Header header;
uint32_t order_id;
uint64_t fill_price;
uint32_t fill_qty;
uint8_t no_of_contras;
std::vector<CounterParty> CounterPartyGroup;
char termination_string[8];
};
void TradeDecoder::findMostActiveTrader()
{
map<char*,int> traders_volume_map;
for(OrderFillMessage m: OrderFillMessages)
{
for(CounterParty cp: m.CounterPartyGroup)
{
outputfile<<cp.trader_tag<<" "<<cp.qty<<endl;
traders_volume_map[cp.trader_tag]+=cp.qty;
}
}
outputFileTrader<<"PRINTING MAP "<<traders_volume_map.size()<<"\n";
for(auto it=traders_volume_map.begin(); it!=traders_volume_map.end(); it++)
{
outputFileTrader<<(it)->first<<(it)->second<<endl;
}
}
Как видите, это просто функция вставки или обновления карты.
outputfile<<cp.trader_tag<<" "<<cp.qty<<endl;
печатает следующее:
IYH 2
HTC 1
IYH 2
HTC 1
IYH 2
HTC 1
IYH 1
HTC 1
IYH 1
HTC 1
IYH 1
HTC 1
IYH 1
HTC 1
IYH 1
тем не мение outputFileTrader<<"PRINTING MAP "<<traders_volume_map.size()<<"\n";
печатает:
PRINTING MAP 1
HTC3050
Что означает, что на карту ничего не было добавлено, и все было найдено, хотя на карте только 1 элемент!?
Любая идея о том, почему это происходит, будет принята с благодарностью!
Хотя я не думаю, что это вызовет проблему с поиском карты, я хочу добавить, что trader_tag
не является недействительным char[3]
,
1 ответ
Решение
Ты используешь char *
за ключ. Это плохая идея, так как она будет значительно отличаться.
Используйте следующее
map<std::string, int> traders_volume_map;
чтобы преодолеть эту проблему.