C++ 映射未正确插入
C++ map not inserting properly
我正在尝试从以下结构填充地图:
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]
.
您正在使用 char *
作为密钥。这是一个坏主意,因为这会有很大差异。
使用以下
map<std::string, int> traders_volume_map;
克服这个问题。
我正在尝试从以下结构填充地图:
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]
.
您正在使用 char *
作为密钥。这是一个坏主意,因为这会有很大差异。
使用以下
map<std::string, int> traders_volume_map;
克服这个问题。