2016-01-25 2 views
0

У меня есть вектор с дублирующимися словами, хранящимися в нем. Как удалить дубликаты? Пример: если у вектора есть apple, orange, pear, apple, grape, grape, я хочу, чтобы он имел только apple, orange, pear, grape. Я пробовал использовать unique, но это не сработало. Я сделал это неправильно?Как удалить повторяющиеся слова из вектора?

+3

Post код, который Бесполезный Не работаем, мы не можем экстраполировать ваш ошибочный код из вашего текста – EdChum

+2

[Сортировка] (http://en.cppreference.com/w/cpp/algorithm/sort) вектор, затем [удалить последовательные дубликаты] (http: //en.cppreference.com/w/cpp/algorithm/unique). –

ответ

4

Использование станд :: сортировать и Стирание:

std::sort(v.begin(), v.end()); 
v.erase(std::unique(v.begin(), v.end()), v.end()); 

Если вы хотите сохранить порядок элементов, которые вы можете использовать std::remove_if и std::set для сохранения уникальных элементов:

template <typename T> 
void remove_dups_from_vector(std::vector<T> &v) 
{ 
    std::set<T> unique_elements; 
    v.erase(std::remove_if(v.begin(), v.end(), 
     [&](const T &value) { 
      return !unique_elements.insert(value).second; 
     }) 
     , v.end()); 
} 
+0

симпатичный гладкий мужчина! –

+0

можно ли без сортировки? Я читаю что-то из файла, и я хочу отслеживать порядок их появления. – agentR12994

+0

Да. Вы можете использовать 'std :: remove_if' и' std :: set' для сохранения уникальных элементов. Обновленный ответ. – malchemist

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