【发布时间】:2014-08-27 01:23:04
【问题描述】:
typedef std::vector<UCHAR> RESPONSE_BUFFER;
typedef TimedHashMap<int, RESPONSE_BUFFER*> TimeResponseHashMap;
内部映射原型将“整数”作为键,将“指向字符向量的指针”作为映射值。
TimeResponseHashMap* inner_pending_response_map;
外地图是地图的地图。它以“整数”作为键,以“指向内部映射的指针”作为映射值。
std::map<int, TimeResponseHashMap* > outer_pending_response_map;
我这样插入: 内部地图是用户定义的地图,因此它具有不同的格式。
inner_pending_response_map->Insert((int)s16MessageID, &resp_buffer, expirytime);
outer_pending_response_map.insert(make_pair((int)s16SessionID,
inner_pending_response_map));
TimeResponseHashMap 提供用户定义的接口“查找”来访问地图的成员。
template <typename Key, typename ElementObject>
THM_ERROR TimedHashMap<Key, ElementObject>::Find(const Key& k, ElementObject& e)
{
typename hash_map<Key, BaseElement_*, dw_hash<Key>, dw_equal_to<Key> >::iterator itr;
try
{
itr = h_->find(k);
} catch ( ... )
{
return E_INTERNAL_ERROR;
}
if ( itr == h_->end() )
{
e = NULL;
return E_ITEM_NOT_FOUND;
}
e = itr->second->e_;
return E_SUCCESS;
}
我有两个键,现在我需要访问内部映射的“映射值”。内部地图使用上面的 Find() 函数进行搜索。我需要将 RESPONSE_BUFFER 变量作为第二个参数传递给 Find() 函数。
我正在尝试这样提取,但输出错误:
RESPONSE_BUFFER resp_buffer;
ExtractFragmentResponse(u16Key1, u16Key2, &resp_buffer);
ExtractFragmentResponse 的定义如下:
STATUS
C_THREAD::ExtractFragmentResponse(USHORT u16SessionID, USHORT u16MessageID,
RESPONSE_BUFFER* resp)
{
(((outer_pending_response_map.find(u16SessionID))->second)->Find((int)u16MessageID, resp))
}
resp 没有给我正确的数据。 怎么办?
【问题讨论】:
-
TimedHashMap提供什么接口? -
我已经为 TimedHashMap 接口添加了代码
-
我需要将“RESPONSE_BUFFER *buff”变量作为参数传递给 ExtractFragmentResponse 函数。
-
@user1124236 一个建议是将一行分成几行。然后你应该能够弄清楚需要做什么。
-
@user1124236 - 我的建议可能需要将该行分成几行。您假设外部
find函数实际上找到了一些东西。outer_pending_response_map.find(u16SessionID)如果不是,那么当您将->second应用于此虚假值时,您将取消对无效迭代器的引用。