代码之家  ›  专栏  ›  技术社区  ›  user6421810

C++映射未正确插入

  •  0
  • user6421810  · 技术社区  · 10 年前

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

    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
    

    这意味着没有向地图添加任何内容,即使地图中只有一个元素,也找到了所有内容!?

    如果您能理解为什么会发生这种情况,我们将不胜感激!!

    虽然我不认为这会导致地图查找问题,但我想补充一点 trader_tag 是以非null结尾的 char[3] .

    1 回复  |  直到 8 年前
        1
  •  2
  •   Ed Heal    10 年前

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

    使用以下内容

    map<std::string, int> traders_volume_map;
    

    来克服这个问题。