Я ищу эффективный способ обрезки или копирования подмножества существующего std :: vector. Критерии для элементов, которые должны иметь право на подмножество/остаются, заключаются в том, что их индекс содержится в отдельном предопределенном std :: vector.C++: выберите подмножество 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 на каждом итерация, которая была бы гораздо менее эффективной, чем просто добавление всех элементов и последующее подборе подмножества.
Любая помощь очень ценится.
ли selectionV нужно быть вектор? Является ли он статичным, когда Test/Result заполняется? – Cameron
И насколько большой выбор по сравнению с тестом? (Всего несколько элементов? Почти все они?) – Cameron
Никакой выборV не обязательно должен быть вектором. Да Тест/Результат статичны при заполнении. SelectionV, скорее всего, будет большим процентом теста, но это определено во время выполнения и может быть любым процентом, хотя он определенно будет иметь не менее 1000 индексов. – oracle3001