class cmp{
public:
bool operator()(country ob1, country ob2){
return (ob1.get_name()>ob2.get_name());
}
};
Сортировка multiset
Мне необходимо отсортировать контейнер multimap по убыванию, в контейнере находятся объекты моего класса, в котором 2 поля.Сортировать нужно по 1-вому полю типа string.
При создании контейнера элементы благополучно сортируются по возрастанию( в классе перегружен оператор <).
Но вот что написано в методичке:
"некоторые алгоритмы могут не поддерживать используемые в вашей программе контейнеры. Например, алгоритм sort не поддерживает контейнеры, которые не имеют итераторов произвольного доступа. В этом случае следует написать свой алгоритм. Например, для стека алгоритм сортировки может выполняться следующим образом: переписать стек в вектор, отсортировать вектор, переписать вектор в стек.
При перемещении элементов ассоциативного контейнера в неассоциативный перемещаются только данные (ключи не перемещаются). И, наоборот, при перемещении элементов неассоциативного контейнера в ассоциативный должен быть сформирован ключ.
Вопрос в том, как сформировать этот ключ?
Вот мои наработки:
Сама функция сортировки.
Вектор сортируется как надо, но при вставке в мультисет все записывается наоборот!
Код:
Код:
void my_sort(multiset<country> & SET)
{
vector<country> v;
multiset<country>::iterator p;
vector<country>::iterator d;
p=SET.begin();
for(p; p!=SET.end(); p++)
v.push_back(*p);
d=v.begin();
sort(d, d=v.end(), cmp());
d=v.begin();
SET.clear();
for(d; d!=v.end(); d++)
SET.insert(*d);
}
{
vector<country> v;
multiset<country>::iterator p;
vector<country>::iterator d;
p=SET.begin();
for(p; p!=SET.end(); p++)
v.push_back(*p);
d=v.begin();
sort(d, d=v.end(), cmp());
d=v.begin();
SET.clear();
for(d; d!=v.end(); d++)
SET.insert(*d);
}