获取QMap :: iterator的position(int)

时间:2016-01-08 10:14:04

标签: c++ qt qmap

我编写了一个基于QListModel的模型来访问存储在QMap中的数据。 QMap保证排序。因此,从QMap :: iterator或const_iterator到int的转换应该是可能的,并且是理智的。

此刻我递减迭代器并递增计数器变量:

    QVariantMap::iterator it = m_data.upperBound(name); //or any other iterator
    int pos =  0;
    for (;it != m_data.begin();it--)
        pos++;
    //now pos contains the position of the entry at index in the map

对于某些数据结构,似乎有int operator-(iterator)定义,允许int pos = it - m_data.begin(); QMap有类似的东西吗?

1 个答案:

答案 0 :(得分:3)

我特别不熟悉QMap,但通常情况下,这是查找地图中元素等级的最简单算法。

假设Qt迭代器可用于标准算法,您可以将其简化为std::distance(m_data.begin(), it)。否则,您可以使用您显示的算法自己为QMap迭代器实现distance