Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И опять сортировка списка в STL 
V
    Опции темы
Vyacheslav
Дата 16.5.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(AlexanderV @ 15.5.2006,  19:17)
MSVC++6

Понятно smile
Оставь тот STL, который был
Вот это будет работать. Проверено на MSVC++6
Код

using namespace std;

//...
namespace std{
template <>
 struct greater<s1*> : public binary_function<s1*,s1*,bool>
 {
   bool operator()(const s1*& __x, const s1*& __y) const { return __x->n > __y->n; }
 };
}

//...
 s.sort(greater<s1*>())
//...


PS.  Здесь ключевое "namespace std{"

Добавлено @ 10:47 
кстати и наследование, обрамленное в namespace тоже сработает
Код

namespace std{
struct my_greater : public greater<s1*>
{
  bool operator()(const s1*& __x, const s1*& __y) const { return __x->n > __y->n; }
};
}


Это ж  Microsoft, понимаешь smile  


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
AlexanderV
Дата 16.5.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Спасибо!

Только второй способ не работает. Он хоть и компилируется, но не работает.  smile 
Но первого уже достаточно!
 
PM MAIL   Вверх
AlexanderV
Дата 16.5.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Новая проблема smile 

Если всунуть в s1 список
list<s1*> s4;
то 
template<>struct greater 
будет выдавать ошибку, так как в файле list.h что-то происходит.

Как быть?

 
PM MAIL   Вверх
Vyacheslav
Дата 16.5.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(AlexanderV @  16.5.2006,  12:06 Найти цитируемый пост)
Только второй способ не работает. 

У меня работают оба.


Цитата(AlexanderV @  16.5.2006,  12:51 Найти цитируемый пост)
Как быть?

Добавь перед объявлением струтуры forward definition для s1 и greater<s1*>
Код

struct s1;
namespace std{
template <> struct greater<s1*>;
}

   


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
AlexanderV
Дата 16.5.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



А как сделать forward definition для s2 который вложен в s1? 
PM MAIL   Вверх
Vyacheslav
Дата 17.5.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код в студию, плиз. На словах - это только гадать. 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 17.5.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Наверное что-то вроде этого 
Код

struct s1
{

    int n;
    s1(int i){n=i;}

    list<s1*> m_list;

    struct s2;  
   
    template <> friend struct std::greater<s2*>;
  
    struct s2 
    {
//...


 


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
AlexanderV
Дата 17.5.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.8.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Да! Это то, что надо! Спасибо smile  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.