Форум программистов, компьютерный форум CyberForum.ru

Map из самописных классов - C++

Восстановить пароль Регистрация
 
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
11.06.2013, 22:20     Map из самописных классов #1
Доброго всем вечера!
Возник вопрос по созданию карты между двумя самописными классами Author и Book (автор отображается в книгу). Объекты класса содержат разные методы. Для создания карты ключем в Author собираюсь делать строку, которая его характеризирует. Но как это реализовать?
Я так понимаю, нужно каким-то образом реализовать оператор "<", или как?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.06.2013, 22:33     Map из самописных классов #2
Именно так.
Или в конструктор мапы передавать функцию сравнения
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.06.2013, 22:36     Map из самописных классов #3
Т.к. значения в std::map упорядочены (для дальнейшего бинарного поиска), для ключа требуется реализовать оператор сравнения ("меньше" в данном случае). Если просто использовать std::map не меняя параметры шаблона.
Например в Вашем случае для Author может быть нечто подобное:
C++
1
2
3
4
bool operator< (const Author& a) const
{
     return this->name < a.name; 
}
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
12.06.2013, 03:36  [ТС]     Map из самописных классов #4
И все-таки, проблему решить не удалось. Прошу прощения за неграмотность, но все-таки, когда работаешь с мапом, отношение порядка < надо возвращать как дружественную функцию от двух переменных, или как метод класса от одной переменной? На использование константного объявления
C++
1
2
3
4
    bool operator< (const Authour &b) const
    {
        return SName < b.get();
    }
выдается ошибка:
error: passing `const Authour' as `this' argument of `std::string Authour::get()' discards qualifiers|

В чем проблема, не могу понять?

Добавлено через 1 час 50 минут
Ошибка была в том, что метод получения значения поля get() не был константным. Пофиксено.
Тема закрыта.
Yandex
Объявления
12.06.2013, 03:36     Map из самописных классов
Ответ Создать тему
Опции темы

Текущее время: 01:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru