c++: выбор подмножества std::vector на основе предопределенных индексов элементов

Я ищу эффективный способ либо обрезки, либо копирования подмножества существующего std::vector. Критерием для элементов, подходящих для подмножества/остатка, является то, что их индекс содержится в отдельном предопределенном std::vector.

e.g std::vector<String> Test = { "A", "B", "C", "D", "E"}

std::vector<int> SelectionV = {1,2,5}

Result = {"A", "B", "E"}

Я буду делать это на очень большом векторе и, возможно, на регулярной основе, поэтому ищу как можно более эффективный метод.

Альтернатива, которую я также рассматриваю, но опять же не уверен в эффективном методе, это...

Поскольку объект Test заполнен (в моем случае это объект, определенный третьей стороной), это результат одного пройти через итератор (прямой доступ к элементам невозможен). Мне было интересно, можно ли вместо этого добавить к тестовому вектору только элементы, которые появляются в количестве, определенном в SelectionV

, например

int count = 0

for (Iterator.begin, Iterator.end(), Iterator++) {
    if (count is a number contained in selectionV)
        add to Test
}

, но я предполагаю, что это приведет к проходу через selectionV на каждой итерации, что будет гораздо менее эффективен, чем простое добавление всех элементов и последующий выбор подмножества.

Мы высоко ценим любую помощь.

5
задан J.N. 10 March 2012 в 22:22
поделиться