[英]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.