У меня есть набор данных, которые мне нужно хранить в упорядоченной карте (т.е. с эффективной вставкой, удалением и локализацией элементов по ключу), но мне также нужно найти n-й элемент, не пройдя через всей карты (иногда могут быть десятки тысяч предметов).
Я знаю один способ сделать это: используйте красное/черное дерево, но сохраняйте общее количество дочерних элементов на одной из ног каждого node. Это делает вставку и удаление немного медленнее (потому что вам нужно обновлять счетчики на каждом node вдоль пути, как вы это делаете), но вы можете найти n-й элемент для любого n примерно в то же время, что и поиск ключа.
Мне интересно, существует ли существующая реализация на С++ такой вещи, которую я могу использовать. Я могу написать это сам, если нет, но я бы действительно не хотел.
РЕДАКТИРОВАТЬ: У меня есть некоторые пояснения к делу. Я неправильно понял это: после поиска элемента по ключу, им нужна способность эффективно выяснить, какой индекс найден найденным элементом, правильно отобразить полосы прокрутки.
Это законная необходимость, и структура данных, описанная выше, по-прежнему будет работать для нее, поэтому я все еще ищу ответ. Но, как кажется, никто еще не придумал, я сам начну его кодировать.