Получение позиции (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 самостоятельно с алгоритмом, который вы показали.

Другие вопросы по тегам