我编写了一个基于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有类似的东西吗?
答案 0 :(得分:3)
我特别不熟悉QMap,但通常情况下,这是查找地图中元素等级的最简单算法。
假设Qt迭代器可用于标准算法,您可以将其简化为std::distance(m_data.begin(), it)
。否则,您可以使用您显示的算法自己为QMap迭代器实现distance
。