Есть много вопросов, как удалить просто повторяющиеся строки:
но мой вопрос отличается от них.
Например, если у меня есть запись vector<string>
:
{"111", "222", "222", "222", "333", "222"}
Мне нужно получить следующий результат:
{"111", "222", "333", "222"}
это означает удаление только повторяющихся значений рядом.
Мое текущее временное решение — создать еще один вектор, скопировать каждый элемент из вектора входа с проверкой, не равен ли этот элемент последнему элементу второго вектора.
Вот пример, адаптированный из станд :: Уникальный страница:
bool comp (std::string &i, std::string &j) {
return (i==j);
}
int main () {
std::string mys[] = {"111", "222", "222", "222", "333", "222"};
std::vector<std::string> myvector (mys,mys+6);
myvector.erase(std::unique (myvector.begin(), myvector.end(), comp), myvector.end());
return 0;
}
и ссылка на оригинальный код:
http://www.cplusplus.com/reference/algorithm/unique/
ОБНОВИТЬ
Как предлагается в комментариях, вы можете пропустить метод сравнения, но имейте в виду, что вы можете использовать его, если объекты в векторе не имеют == . Я просто привел этот пример, потому что он завершен на 100% и может быть легко распространен на другие типы объектов.
ОБНОВЛЕНИЕ 2
Да, и вы должны стереть последнюю часть вектора, потому что, как говорит док, уникальный Метод вернет «итератор элемента, который должен рассматриваться как его новый элемент конца-в-конце»
Других решений пока нет …