Сообщение Схлопывание вектора структур по маскам от 14.02.2019 9:31
Изменено 14.02.2019 9:39 dwebster
Схлопывание вектора структур по маскам
Допустим имеется вектор структур
struct { string s1, s2, s3; };
s1, s2, s3 — некие непустые строки, но если строка = "*" значит это маска, и все записи в векторе, которые подпадают под эту маску должны быть удалены.
Т.е. на входе
1. "aaa", "bbb", "ccc"
2. "aaa", "bbb", "vvv" // должно быть удалено
3. "aaa", "bbb", "ccc"
4. "aaa", "*", "vvv" // маска
5. "aaa", "www", "ccc"
6. "aaa", "dfg", "vvv" // должно быть удалено
#2 и #6 должны быть удалены из результирующего вектора, т.к. маска #4 их покрывает.
Маской может являться любая из строк или комбинаций строк, т.е. если имеется элемент "*", "*", "*", он покрывает все остальные, и в результирующем векторе должен остаться один.
Сделать это тривиально сложности не представляет. Но вероятно существуют красивые и максимально эффективные алгоритмы для подобных задач. О них бы и хотелось узнать.
struct { string s1, s2, s3; };
s1, s2, s3 — некие непустые строки, но если строка = "*" значит это маска, и все записи в векторе, которые подпадают под эту маску должны быть удалены.
Т.е. на входе
1. "aaa", "bbb", "ccc"
2. "aaa", "bbb", "vvv" // должно быть удалено
3. "aaa", "bbb", "ccc"
4. "aaa", "*", "vvv" // маска
5. "aaa", "www", "ccc"
6. "aaa", "dfg", "vvv" // должно быть удалено
#2 и #6 должны быть удалены из результирующего вектора, т.к. маска #4 их покрывает.
Маской может являться любая из строк или комбинаций строк, т.е. если имеется элемент "*", "*", "*", он покрывает все остальные, и в результирующем векторе должен остаться один.
Сделать это тривиально сложности не представляет. Но вероятно существуют красивые и максимально эффективные алгоритмы для подобных задач. О них бы и хотелось узнать.
Схлопывание вектора структур по маскам
Допустим имеется вектор структур
struct { string s1, s2, s3; };
s1, s2, s3 — некие непустые строки, но если строка = "*" значит это маска, и все записи в векторе, которые подпадают под эту маску должны быть удалены.
Т.е. если на входе
1. "aaa", "bbb", "ccc"
2. "aaa", "bbb", "vvv" // должно быть удалено
3. "aaa", "bbb", "ccc"
4. "aaa", "*", "vvv" // маска
5. "aaa", "www", "ccc"
6. "aaa", "dfg", "vvv" // должно быть удалено
#2 и #6 должны быть удалены из результирующего вектора, т.к. маска #4 их покрывает.
Маской может являться любая из строк или комбинаций строк, т.е. если имеется элемент "*", "*", "*", он покрывает все остальные, и в результирующем векторе должен остаться один.
Сделать это тривиально сложности не представляет. Но вероятно существуют красивые и максимально эффективные алгоритмы для подобных задач. О них бы и хотелось узнать.
struct { string s1, s2, s3; };
s1, s2, s3 — некие непустые строки, но если строка = "*" значит это маска, и все записи в векторе, которые подпадают под эту маску должны быть удалены.
Т.е. если на входе
1. "aaa", "bbb", "ccc"
2. "aaa", "bbb", "vvv" // должно быть удалено
3. "aaa", "bbb", "ccc"
4. "aaa", "*", "vvv" // маска
5. "aaa", "www", "ccc"
6. "aaa", "dfg", "vvv" // должно быть удалено
#2 и #6 должны быть удалены из результирующего вектора, т.к. маска #4 их покрывает.
Маской может являться любая из строк или комбинаций строк, т.е. если имеется элемент "*", "*", "*", он покрывает все остальные, и в результирующем векторе должен остаться один.
Сделать это тривиально сложности не представляет. Но вероятно существуют красивые и максимально эффективные алгоритмы для подобных задач. О них бы и хотелось узнать.