Контейнер STL перемещает выбранные элементы - PullRequest
0 голосов
/ 23 марта 2012

Как выбрать элементы с определенным значением из контейнера STL и переместить их в конец этого контейнера?

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

Учитывая, что вы сделали комментарий о желании использовать std :: vector, я бы предложил использовать std :: partition или std :: stable_partition, т.е.

#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    int init_values[] = {1, 1, 7, 3, 19, 5, 5, 4, 5, 2, 5, 8, 9, 10, 5, 1};
    std::vector<int> values(
        init_values,
        init_values + sizeof(init_values) / sizeof(int)
    );

    std::stable_partition(
        values.begin(), values.end(),
        std::bind1st(std::not_equal_to<int>(), 5)
    );

    std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::cout, ", "));
    std::cout << "\n";

    return 0;
}

Этот код переместит все элементы вектора, равные 5, в конец вектора, сохраняя относительный порядок оставшихся элементов в такте.

5 голосов
/ 23 марта 2012

Вы можете попробовать использовать std::partition с предикатом, который возвращает true для элементов , не равных целевому значению. Если вам нужно сохранить относительный порядок элементов, также есть std::stable_partition.

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