Exercises on Advanced Class Members and Code Organization - Task 3 - Vectors
Първият ми въпрос по задачата е: Защо при така написан код в Main-a:
std::multiset<Vector, ReverseComparer<Vector, VectorLengthComparer> > vectors;
OverLoad-ваме оператор () , при положение, че VectorLengthComparer се извиква само с името си.
Търсих обяснения в нета за тия сетове и си загубих доста време, но не открих нищо полезно.. единствено, че са наредени контейнери.
template <class Key, class Compare = std::less<Key>> ..... така ми дава, че се инициализира set.
multiset <
int
, greater <
int
> > gquiz1; <br>
<br>
Може ли обяснение, по написването на кода, защо веднъж пишеме Vector,ReverseComparer и в скобите му подаваме: Vector, VectorLengthComparer?
Създаваме
template<typename Container, typename Comparer>
struct ReverseComparer
{
Comparer comparer;
bool operator()(const Container & a, const Container & b)
{
return comparer.isSmaller(a,b);
}
};
За Reverse сравненията... Но защо създаваме вътре обект от тип Comparer? И как този обект има достъп, до горната структура? Нали ппц за да имаме достъп до фукнции на даден клас, трябва да създадем елемент от този клас... а тук създаваме елемент от тип template... Как този template има достъп до функцията на struct VectorLengthComparer.
Последен въпрос: std::multiset<Vector, ReverseComparer<Vector, VectorLengthComparer> > vectors;
Ако след Vector, VectorLengthComparer добавя < неща за сравнение > това ще сравни multiset-a, по още критерии?