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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с STL, не работает алгоритм sort 
:(
    Опции темы
Zerony
Дата 15.12.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.12.2008

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



Всем привет, следующая задача. 

Есть колода карт. Карту я реализовал как класс с двумя полями (масть, ранг). Создать колоду на 36 карт (успешно), перемешать ее (успешно), потом записать их в стек (успешно), после чего взять шесть карт и записать в список (успех), а потом отсортировать список (вот и сам вопрос). 

В общем, сам класс я сделал так: 
Код

class tCard // Class of cards
{
public:
    int Suit; 
    int Rang; 
    tCard (int tSuit = 1, int tRang = 1) // Constructor 
    {
        Suit = tSuit; 
        Rang = tRang;
    }
    friend std::ostream &operator<<(std::ostream &output, tCard &P) {
        string s[] ={"Крест", "Пика", "Черва", "Бубна"} ;
        string sRang[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Валет", "Дама", "Король", "Туз"};
        output<<setw(5)<<s[P.Suit]<<setw(11)<<sRang[P.Rang]<<endl; 
        return output;};
};


Перегрузил операторы сравнения 
Код

    bool operator> (tCard a1, tCard a2)
    {
        if (a1.Suit>a2.Suit)
        {
        return true;
        }
        else return a1.Rang>a2.Rang; };

    bool operator< (tCard a1, tCard a2)
    {
        if (a1.Suit<a2.Suit)
        {
        return true;
        }
        else return a1.Rang<a2.Rang; 
    };
    bool operator== (tCard a1, tCard a2)
    {
        if ((a1.Suit==a2.Suit) &&(a1.Rang==a2.Rang))
        {
        return true;
        }
        else return false ;
    }


Вот место, где выдает ошибку. Ошибку выдает уже на самом этапе выполнения программы
Код

for (int i=0; i<6; i++) // Тут я 6 карт достаю из колоды и в список
    {
        l1.push_back(stDeckCards.top());
        stDeckCards.pop();
    }
    // Выводим на экран
    cout<<"Верхние 6 карт\n";
    list<tCard>::iterator p=l1.begin();
    for (int i=0; i<6; i++)
    {
        cout<<*p; 
        p++;
    }
     // Вот тут все попытки отсортировать его завершались неудачей. 
    cout<<"Сортировка списка\n";
    list<tCard>::iterator p2 = l1.end();    
    p = l1.begin();
    l1.sort(); //Не работает, так же как и если взять просто алгоритм и написать sort (p, p2), только в случае с алгоритмом ошибка на этапе компиляции
    for (int i=0; i<6; i++)
    {
        cout<<*p; 
        p++;
    }


А сама ошибка: 


Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  __________1.jpg 100,56 Kb
PM MAIL   Вверх
mes
Дата 15.12.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Zerony @  15.12.2011,  19:24 Найти цитируемый пост)
        if (a1.Suit<a2.Suit)
        {
        return true;
        }
        else return a1.Rang<a2.Rang; 


с такой логикой сравнения у Вас может быть одновременно правый меньше левого и левый меньше правого smile



--------------------
PM MAIL WWW   Вверх
Zerony
Дата 15.12.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.12.2008

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



Цитата(mes @ 15.12.2011,  20:44)
Цитата(Zerony @  15.12.2011,  19:24 Найти цитируемый пост)
        if (a1.Suit<a2.Suit)
        {
        return true;
        }
        else return a1.Rang<a2.Rang; 


с такой логикой сравнения у Вас может быть одновременно правый меньше левого и левый меньше правого smile

И как вы так быстро уловили? 

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

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

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

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

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


 




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


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

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