繁体   English   中英

来自std的unordered_set

[英]unordered_set from std

我必须将Windows代码重写为跨平台视图。 这是示例:

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

每个人在代码中的迭代器中都有_Ptr成员,但我在文档中找不到它。 我认为它适用于Visual Studio(它是stl的实现)。 任何想法如何替换它? _Myval_Myval


UPD:

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

class QuadTreeOccupant
{
   public:
      AABB aabb;
};

it->aabb在错误行- it->aabb

错误:请求在“成员'AABB' * it.std :: __详细:: _ Hashtable_iterator <_Value,__constant_iterators,__cache> ::操作符- >与_Value = QDT :: QuadTreeOccupant *,布尔__constant_iterators =真,布尔_ 缓存= false,std :: _detail :: _ Hashtable_iterator <_Value,__constant_iterators,__cache> :: pointer = qdt :: QuadTreeOccupant * const *',其为非类类型'qdt :: QuadTreeOccupant * const'

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

  • it->
  • (*it).

代替它it._Ptr->_Myval.

至于更新:迭代器就像元素的指针一样,因此*it是指所包含的元素; 但是 ,您不能使用it->访问元素的成员,因为您的member元素是一个指针,因此迭代器“类似于”一个双指针。

长话短说,您必须执行以下操作:

(*it)->aabb;

因为*it为您提供了QuadTreeOccupant* ,然后您可以通过->运算符访问其成员。

- -编辑 - -

太晚了...

_Ptr看起来像是一个实现细节,您不应该访问它(即它可能应该是“私有的”),并且在任何情况下都不应使用:以下划线开头,大写字母开头的名称是不允许的除了明确邀请的人员之外,每个人都可以访问该区域。这些仅仅是C ++系统的实现者(例如,编译器和标准库编写器)。

你只想用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM