Loading...
MilushT avatar MilushT 1 Точки

Judge Assignment 05 - Task 5 - Sorting друг въпрос

Здравейте,

Имам един такъв въпрос. Това, което е като код в SortingMain-a e:

 1) typedef std::set<Song,Reverse<Song, LessThan<Song> > > Set;

Аз обаче съм го подкарал да върви по следния начин като промених main-a

2) typedef  std::set<Song, Reverse<Song,Song>> Set;

Това го напрaвих като на темплейтнатия Reverse клас направих специализация за Song. T.e. Reverse-a работи (за всичко int, string, Song) без избщо да има нужда от LessThan,. Сега обаче за да го приеме judge трябва по-някакъв начин да променя специализацията и вместо нея да имам  LessThan темплейтнат клас. Изобщо не e проблем да се на направи LessThan класа. Обаче нещо не намирам начин да го подам на Reverse-a. Не съм сигурен дали въпроса е на синтаксис или принципен :(, ама да го подкарам от синтаксиса. Някакви идеи?

 

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

Решаваш друга задача така, поне според това, което описа.

Цялата идея на Reverse е, че прави обратната подредба на тази зададена от LessThan. Тоест, каквато и подредба някой да си дефинира през LessThan, ще може да я обърне чрез Reverse.

Щом твоят Reverse работи без да ползва LessThan, значи губиш информацията от LessThan и казваш, че ти дефинираш какво може да се прави, не LessThan - тоест ако някой иска да ползва Reverse за някой нов клас, примерно Company, няма да може си дефинира LessThan за Company и да го подаде на Reverse.

Затова и няма как да накараш main кода да ползва твоята специализация - защото main кода ти казва какво иска, той иска да ти подаде Song и сравнител на Song, и очаква това да работи. Ако ползваме аналогия, пристига клиентът и ти казва, че иска да си купи трактор, и ти почваш да му предлагаш различни модели лек автомобил, защото са по-бързи или по хубави и т.н., но клиентът не иска лек автомобил, иска трактор, защото трактор му трябва - няма как да го накараш да иска лек автомобил. Тоест ти си изгубил частта от информацията, която описва какво клиентът иска (трактор), и се опитваш да я замениш с нещо, което не го е поискал. Затова и няма как да се разберете.

Отново, така ми изглеждат нещата от това, което написа, особено от частта, че не ползваш LessThan. Не съм ти поглеждал кода, така че ме коригирай ако не те разбирам правилно.

Поздрави,

Жоро

0
MilushT avatar MilushT 1 Точки

Здравей,

Ами не е точно така. Може би не успявам да обясня добре. Всъщност това, което прави LessThan се прави, ама не като LessThan, а като specialization на Reverse за Song. Разбира се това не работи с main-а(поне не без да пипнеш main-a). Мисля, че ми е ясно какво и защо трябва да прави LessThan в Reverse, но нещо чисто синтактично не съм намерил начин да кажа на Reverse да използва LessThan.

0
MilushT avatar MilushT 1 Точки

Ето за това говоря:

Error    C3200    'LessThan<Song>': invalid template argument for template parameter 'Comparator', expected a class template   
Error    C3203    'Reverse': unspecialized class template can't be used as a template argument for template parameter '_Pr', expected a real type  


 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.