C ++映射未正确插入

时间:2016-06-11 05:22:28

标签: c++ dictionary std stdmap c++-standard-library

我正在尝试从以下结构填充地图:

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 个答案:

答案 0 :(得分:2)

您正在使用char *作为密钥。这是一个坏主意,因为这会有很大差异。

使用以下

map<std::string, int> traders_volume_map;

克服这个问题。