在基类型“侵入式双向链表”的指针字典中获取迭代器的位置

时间:2014-02-18 20:31:58

标签: c++ dictionary iterator

目前我正在尝试使用迭代器解决两个问题。

1使用

之类的东西时
forAllIter(PtrDictionary<phaseModel>, phases_, iter)  
{ 
phaseModel& phase = iter();
.
.
.
}

是否可以获取迭代器“iter”的实际位置/索引(哪个指针是此时引用的迭代器)? 我知道对于矢量类,我可以使用以下链接中描述的内容

What is the most effective way to get the index of an iterator of an std::vector?

但不幸的是,我必须使用的类“PtrDictionary”不提供方法“begin()”。此外,“PtrDictionary”基本上是“侵入式双向链表”类型。

2

  

旧问题:

     
    

如果我定义像

这样的词典   
const dictionary& subDict_Droplets;
subDict_Droplets = properties.subDict("currentValue");
     

我可以为字典创建一个迭代器,将此迭代器设置为a   字典的具体位置(我将从中得到的位置)   如果可能的话,第一个迭代器 - &gt;请参阅代码段1)并获取内容   那个位置的字典?

     

我已阅读以下帖子

     

how to get iterator to a particular position of a vector

     

但是类“词典”也没有任何方法“begin()”。

编辑/新建:我现在使用了一个列表(属于“类型”向量),如

const List<dimensionedScalar> List_Droplets;
List_Droplets = properties.subDict("currentValue");

就我所读到的那样,向量的元素应该像数组一样可访问:)。

但是,phases_类型的对象PtrDictionary<phaseModel>的类型(父项:DictionaryBase< IDLListType, T >及其父项:IDLListType) 1}}我无法改变。

欢迎任何提示,想法或代码解决方案:)

问候直播

1 个答案:

答案 0 :(得分:1)

有时,迭代器对应于可以轻松找到的索引,例如向量迭代器。在这里你使用distance(vector.begin(),iter);

有时迭代器对应于一个不容易找到的索引,例如列表迭代器。在这里你必须从begin()开始,然后通过计算,随时随地计算。 distance()会在需要时执行此操作,但显然会慢得多。

有时候,“索引”的概念并不真正适用 - 我认为未分类的地图可能就是一个很好的例子。距离仍会返回一个值,但我认为并不重要。它甚至可能依赖于实现 - 我不得不查看它。