我有以下代码...
typedef boost::unordered_map<int, boost::unordered_map<int, float>* > User_item_rating_map;
如您所见,映射的值是一个指针。如何获取地图中的值。如果我使用(*(ret[int]))[int]
,我似乎无法获得价值。我究竟做错了什么?
我有以下代码...
typedef boost::unordered_map<int, boost::unordered_map<int, float>* > User_item_rating_map;
如您所见,映射的值是一个指针。如何获取地图中的值。如果我使用(*(ret[int]))[int]
,我似乎无法获得价值。我究竟做错了什么?
文件 AUTOEXP.DAT 是告诉 Visual Studio 如何在调试器中表示数据结构的文件。
一些描述可以很简单,例如 CSize:
CSize =cx=<cx> cy=<cy>
但它们也可能非常复杂,例如 bitset 的这个:
std::bitset<*>{
preview
(
#(
"[",
$c.digits,
"](",
#array
(
expr : ($c._Array[$i / $c._Bitsperword] >> ($i % $c._Bitsperword)),
size : $c.digits
) : [($e & 1),d],
")"
)
)
children
(
#array
(
expr : ($c._Array[$i / $c._Bitsperword] >> ($i % $c._Bitsperword)),
size : $c.digits
) : (bool)($e & 1))
}
您可以为 boost unordered_map 编写自己的描述,或者可能其他人已经为您完成了。看看https://svn.boost.org/trac/boost/ticket/4209(这似乎是你需要的东西)。
我遇到了同样的麻烦,去查看来自Boost Ticket #4209的建议修复是否有效,但没有。我可以看到元素的总数,但看不到内容。
因此,选择是切换到有插件的VS2012 ,或者投资于找出 VS2010 中的格式并修复现有的建议代码。
或者,这就是我所做的,使用 std::tr1::unordered_set / map 代替。Visual Studio 中有一个可视化工具。并且,稍后,在调试之后,如果您愿意,可以切换回 boost。
使用文本编辑器打开文件 autoexp.dat。您通常会在以下位置找到它:
C:\Program Files\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\autoexp.dat
将以下代码添加到 [Visualizer] 部分。应在定义另一个可视化工具之后添加此代码。
;------------------------------------------------------------------------------
; boost unordered collections
;------------------------------------------------------------------------------
boost::unordered::unordered_map<*,*,*,*,*>{
preview (
#(
"[",
$e.table_.size_,
"](",
#list(
head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
size: $e.table_.size_,
next: next_
) : #(*((std::pair<$T1 const ,$T2>*)&(*(boost::unordered::detail::ptr_node<std::pair<$T1 const ,$T2> > *)(&$e)).value_base_)),
")"
))
children(
#(
size: ($e.table_.size_),
#list(
head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
size: $e.table_.size_,
next: next_
) : #(*((std::pair<$T1 const ,$T2>*)&(*(boost::unordered::detail::ptr_node<std::pair<$T1 const ,$T2> > *)(&$e)).value_base_)),
))
}
boost::unordered::unordered_set<*,*,*,*>{
preview (
#(
"[",
$e.table_.size_,
"](",
#list(
head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
size: $e.table_.size_,
next: next_
) : #(*(($T1*)&((*(boost::unordered::detail::ptr_node<$T1>*)(&$e)).value_base_))),
")"
))
children(
#(
size: ($e.table_.size_),
#list(
head: $e.table_.buckets_[$e.table_.bucket_count_].next_,
size: $e.table_.size_,
next: next_
) : #(*(($T1*)&((*(boost::unordered::detail::ptr_node<$T1>*)(&$e)).value_base_))),
))
}
例如,我在行之前添加了它
;------------------------------------------------------------------------------
; std::plus, etc. from <functional>
;------------------------------------------------------------------------------
在您的下一个调试会话中,它应该可以工作。
我已经使用 Microsoft Visual Studio 2010 版本 10.0.40219.1 SP1Rel 和 boost 1.61.0 对其进行了测试。