Получение позиции (int) QMap::iterator
Я написал модель на основе 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 ответ
В частности, я не знаком с QMap, но, как правило, это самый простой алгоритм для определения ранга элемента на карте.
Предполагая, что итераторы Qt можно использовать со стандартными алгоритмами, вы можете упростить это до std::distance(m_data.begin(), it)
, В противном случае вы можете реализовать distance
для итераторов QMap самостоятельно с алгоритмом, который вы показали.