2013-09-01 4 views
0

У меня есть два вектора A и B. A содержит данные в виде строки таблицы на основе некоторого первичного ключа, например row_id. Vector B также содержит некоторые данные также в виде строки другой таблицы, основанной на том же ключе. Теперь мое требование состоит в том, чтобы выбрать только те данные из вектора A, когда row_id обоих векторов A & B соответствует другим функциям. Как это можно достичь?Перемещение требуемых данных из одного вектора в другой вектор

+1

Я предлагаю вам попробовать сами или, по крайней мере, google (по-настоящему), а затем прийти к нам, если вы можете показать код, который не работа, и вы не знаете, почему –

+1

Что означает «когда row_id обоих векторов A & B соответствует» означает? Означает ли это, что вектор B содержит любой элемент с тем же row_id, или это означает, что для конкретного индекса i A [i] имеет тот же row_id, что и B [i]? Или что-то другое? –

+0

Это вопрос домашнего задания? –

ответ

1

Если A Данные & B, как:

struct X{ 
int row_id; 
int data; 
} 

Тогда вы можете, вероятно, использовать std::set_intersection как следующие

Здесь C будет вектор, содержащий данные из & B, где row_id матчи

std::vector<X> A,B,C; 
//Sort A,B based on row_id use std::sort with custom comparator 

std::set_intersection (A.begin(), A.end(), B.begin(), B.end() 
       std::back_inserter(C), 
       [](const X& a, const X& b) { 
       return a.row_id < b.row_id 
       }); 
+0

@POW Для этого нужны отсортированные векторы, и вам не хватает B.end(). –

+0

@ DieterLücking обновлено спасибо – P0W

+1

@POW Еще одна вещь: используйте <для сравнения id (C++ использует меньше, чем для эквивалентности) –

Смежные вопросы