来自std的unordered_set

时间:2012-02-09 00:02:26

标签: c++ gcc stl unordered-set

我必须将windows-code重写为跨平台视图。这是一个例子:

std::unordered_set<Type>::iterator it = ...;
it._Ptr->_Myval->...

代码中的每个代码都有迭代器中的_Ptr成员,但我在docs中找不到它。我认为它适用于visual studio(它是stl的实现)。任何想法如何取代它?什么是_Myval


UPD:

for(std::unordered_set<QuadTreeOccupant*>::iterator it = ...)
   it->aabb;

class QuadTreeOccupant
{
   public:
      AABB aabb;
};

it->aabb行的错误:

  

错误:'*中成员'aabb'的请求   it.std :: __ detail :: _ Hashtable_iterator&lt; _Value,__ constant_iterators,   __cache&GT; ::操作符 - &GT; _Value = qdt :: QuadTreeOccupant *,bool __constant_iterators = true,bool _ cache = false,std :: _detail :: _ Hashtable_iterator&lt; _Value,__ constant_iterators,   __cache&gt; :: pointer = qdt :: QuadTreeOccupant * const *',属于非类型'qdt :: QuadTreeOccupant * const'

3 个答案:

答案 0 :(得分:4)

这些是VC实现的unordered_map的实现细节。您应该删除对_Ptr_Myval的引用,并使用以下任一项:

  • it->
  • (*it).

取代it._Ptr->_Myval.

答案 1 :(得分:1)

至于更新:迭代器是“像元素的指针”,因此*it引用包含的元素; ,您无法使用it->访问元素的成员,因为您的成员元素是一个指针,因此迭代器“就像”一个双指针。

长话短说,你必须这样做:

(*it)->aabb;

由于*it为您提供了QuadTreeOccupant*,然后您可以通过->运营商访问其成员。

--- ---编辑

太晚了......

答案 2 :(得分:0)

_Ptr看起来像一个你不应该访问的实现细节(即它应该是私有的),你不应该在任何情况下使用:名称以下划线开头,后跟一个除了明确邀请的人之外,大写字母对于每个人来说都是禁区。这些只是C ++系统的实施者(例如编译器和标准库编写者)。

您只想使用

it->...
(*it). ...

...访问迭代器的元素。