Стереть дубликат первых 2 символов в векторе строк - PullRequest
2 голосов
/ 01 июля 2019

У меня есть вектор строк, содержащих элементы в этом формате: $A,1,2,3,4 Я хотел бы удалить дубликаты строк только на основе 2 первых символов $A.

#include <iostream>
#include <vector>
#include <algorithm>

int main(){

    std::vector<std::string> vec;

    vec.push_back("$A,1,2,3,4");
    vec.push_back("$B,1,6,8,1");
    vec.push_back("$A,1,2,5,9");

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

    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

    for(auto &entry: vec)
        std::cout << entry << std::endl;


    return 0;
}

Я хочу сохранитьтолько одна строка, начинающаяся с $A в моем векторе, но эти коды сравниваются, если вся строка уникальна.

Например: если строка $A...; $B...; $A...; $B..., то результат будет $A...; $B...

1 Ответ

9 голосов
/ 01 июля 2019

Используйте правильный предикат (совместимый с предикатом sort), что-то вроде:

vec.erase(std::unique(vec.begin(), vec.end(),
                      [](const std::string& lhs, const std::string& rhs){
                          return lhs.substr(0, 2) == rhs.substr(0, 2);
                      }),
          vec.end());
...