Опитвам се да измисля ламбда, която ще позволи на std::equal_range
да върне диапазон, в който търсеният низ съществува като префикс. Тъй като това вероятно не е формулирано правилно, пример:
Даден е векторът от низове:
- C:\users\andy\documents\screenshot.jpg
- C:\users\bob\desktop\file.txt
- C:\users\bob\desktop\picture.png
- C:\users\bob\desktop\video.mp4
- C:\users\john\desktop\note.txt
Бих очаквал итераторите да бъдат върнати
- C:\users\bob\desktop\file.txt и
- C:\users\bob\desktop\video.mp4.
Как да напиша ламбда за сравнение за std::equal_range
, която постига това, или std::equal_range
не е правилният инструмент за тази работа?
std::equal_range
с извиквания обект за сравнение изглежда достатъчно за задачата. Просто кодирайте обект за сравнение, който реализира сравнение, което съответства на префикса. Ще трябва внимателно да кодирате обекта за сравнение с отделни реализации наcomp(element, value)
иcomp(value, element)
, за да върнете правилния резултат за сравнение. - person Sam Varshavchik   schedule 28.12.2017bool
, показваща дали пълният низ се съпоставя преди префикса. Това е смешно тривиално и веднъж написано, вече сте 50% готови. Останалите 50% са функция, която приема префикс и пълен низ и връщаtrue
, ако префиксът се сравни преди пълния низ. Проблема решен. - person Sam Varshavchik   schedule 28.12.2017substr
с помощта наstd::string.compare
, но това ми беше по-ясно, докато го гледах. свиване на рамене - person Retired Ninja   schedule 28.12.2017std::string
. След това мога да правя разлика между двата типа функции за сравнение и да внедря двеoperator()
s в персонализирания клас за сравнение, сравнявайки префикс към низ и префикс към низ. - person Sam Varshavchik   schedule 28.12.2017C:\users\bob\desktop\picture.png
защо не трябва да се връща? - person Killzone Kid   schedule 28.12.2017<=
или>=
нарушава строгото изискване за слабо подреждане за сравнение. Този отговор го обяснява по-добре, отколкото бих могъл. :) stackoverflow.com/a/981299/920069 - person Retired Ninja   schedule 28.12.2017