Карта 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;

чтобы преодолеть эту проблему.

Другие вопросы по тегам