Наилучшее решение разностного поиска двух векторов STL - PullRequest
0 голосов
/ 25 марта 2011

У меня уже есть два вектора STL. Например:

vector<int> MyList;
MyList.push_back(10);
MyList.push_back(20);
MyList.push_back(30);
MyList.push_back(40);
MyList.push_back(50);

vector<int> MyListSub;  
MyListSub.push_back(20);
MyListSub.push_back(30);
MyListSub.push_back(40);

И я хочу получить количество элементов, которое находится в MyListSub, а не в MyList. Для этого экземпляра результат «2»

1 Ответ

4 голосов
/ 25 марта 2011

Вы можете использовать std::set_difference для этого:

std::vector<int> diff;
std::set_difference(MyList.begin(), MyList.end(),
                    MyListSub.begin(), MyListSub.end(),
                    std::back_inserter(diff));

Как указывает @Jan, векторы должны быть отсортированы. Если это не так, используйте std::sort для их сортировки:

std::sort(MyList.begin(), MyList.end());

В качестве альтернативы вы можете сначала сохранить свои элементы в std::set, поэтому они уже будут отсортированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...