小编Yih*_*ang的帖子

stl map.find使用vs2010在调试和发布中执行不同的操作

我正在使用stl map来存储从pcap文件中提取的流信息.当数据包到来时,我使用map.find来查找数据包所属的流是否存在.我必须使用map.find两次,因为从A到B的数据包和从B到A的数据包属于同一个流.

struct FiveTuple
{
unsigned short source_port;
unsigned short dest_port;
unsigned int source_ip_addr;
unsigned int dest_ip_addr;
unsigned char transport_proto_type;
};
Run Code Online (Sandbox Code Playgroud)

FiveTuple识别流程.我使用FiveTuple作为地图中的关键元素.

map是map <FiveTuple,Flow,FlowCmp>,其中FlowCmp是一个结构,使用memcmp来查看FiveTuple a是否小于FiveTuple b,就像operator <.为了查找数据包的流是否存在,我编写了如下代码,其中m是地图的名称,five_tuple是一个FiveTuple,其中包含从数据包中提取的信息:

auto it = m.find(five_tuple);
if( it == m.end())
{
     //swap source and dest ip/port in five_tuple,
    it = m.find(five_tuple);

    if(it == m.end())
    {
          //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

在vs2010的调试版本中,结果是合理的.当我将它更改为发布版本时,我发现不是返回正确的迭代器,第二个m.find只是给了我大部分时间.我发现没有初始化问题.如何修复发布版本问题?

c++ dictionary stl

4
推荐指数
1
解决办法
222
查看次数

标签 统计

c++ ×1

dictionary ×1

stl ×1