У меня есть определенная пользователем структура данных пользователя (для работы с сетками). Единственный открытый доступ к базовым элементам - через итератор (прямой доступ к элементу «x» невозможен).C++: эффективное извлечение подмножества элементов из типа данных, доступ к которому возможен только через итератор
У меня также есть список индексов элементов, хранящихся в виде std :: vector, которые я хочу извлечь, где я буду определять первый элемент, который посетил итератор, как index = 1, index = 2 и т. Д. Эффективно я я хочу извлечь подмножество элементов на основе индекса.
Я буду делать это много раз (сетка, из которой я беру выборку, будет постоянно меняться, и я хочу сохранить выборку по тем же самым показателям), поэтому мне нужно как можно эффективнее использовать метод.
На данный момент я действительно не могу придумать более эффективный способ, чем добавлять все элементы в std :: vector, а затем прокручивать список индексных элементов и выбирать все необходимые элементы. Идеально для времени и для хранения данных это не кажется очень аккуратным способом сделать это.
Любые предложения были бы очень признательны.
Можете ли вы получить доступ к элементам через смещение к стартовому итератору, то есть '* (data.begin() + offset)'? – hatboyzero
Вместо добавления всех элементов в список используйте счетчик в вашем цикле итератора, добавляя элементы, только когда ваш счетчик = ваш следующий индекс. Таким образом, вы можете сделать это за один проход и без необходимости копировать из промежуточного вектора. Вам также необходимо будет отслеживать, на каком индексе вы находитесь, и иметь индексы в отсортированном порядке. – arc
@arc. Если структура данных была статической, это сработало бы, но вопрос указывает, что содержимое структуры данных будет динамически изменяться. Любая промежуточная структура данных, используемая 'std :: vector <>' или иначе, должна была бы быть перестроена каждый раз, когда структура данных изменяется ... – hatboyzero