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

Вектор объектов класса и алгоритмы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
09.04.2011, 23:58     Вектор объектов класса и алгоритмы #1
Просветите, пожалуйста, по вопросу:
Пусть у нас есть класс, к примеру такой
C++
1
2
3
4
5
class myclass
{
int a,
double b
}
со всеми необходимыми конструкторами
Пусть у нас создан и заполнен вектор объектов класса
Как теперь написать условия алгоритмов, чтобы можно было работать, к примеру, только с одной переменной из класса? То есть, как пример, сортировку по первой и сортировку по второй переменной.
Я могу написать функцию перегрузки < для сравнения по первой переменной, но для второй так нельзя.
И еще вопрос, как мне задать предикат для find_if, чтобы сравнивать, к примеру, переменную а с каким-то числом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
10.04.2011, 00:12     Вектор объектов класса и алгоритмы #2
Чтобы сравнивать по-особому, придется писать собственный функтор сравнения, например такой:

C++
1
2
3
4
5
6
7
struct mycomp : std::binary_function<myclass,myclass,bool>
    {
    bool operator() (const myclass & i,const myclass & j) const
        {
        return i.a > j.a;
        }
    };
А по поводу find_if можно придумать например что-то такое:

C++
1
2
3
std::vector<myclass> abb;
...
std::vector<myclass>::iterator it = std::find_if(abb.begin(),abb.end(),std::bind2nd(mycomp(),0));
здесь члены a класса myclass будут сравниваться с нулем посредством оператора >.
С сортировкой точно так же: пишете кастомный функтор и передаете в std::sort или что там требуется
C++
1
std::sort(abb.begin(),abb.end(),mycomp());
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
10.04.2011, 00:19     Вектор объектов класса и алгоритмы #3
или так
C++
1
2
3
4
5
6
7
8
9
10
class Comp
{
    int a;
public:
    Comp(int aa): a(aa){}
    bool operator()(myclass obj)
    {
        return obj.a < a;
    }
};
и тогда файн_иф такой
C++
1
find_if(v.begin(), v.end(), Comp(10));
И еще, почему не выходит по второй переменной сортировать?
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
10.04.2011, 01:04  [ТС]     Вектор объектов класса и алгоритмы #4
По второй переменной нет сортировки, потому что для нее не перегружен оператор сравнения.

Добавлено через 39 минут
еще вопросы возникли
Вот если у меня есть перегрузка сравнения для первой переменной, то могу ли я это как-то использовать в функциональном объекте или предикате?А если мне нужно функция с двумя сравнениями(входит ли число в диапазон).
МОжно ли в алгоритмах в предикатах давать составные условия? Особенно интересует, если эти условия - функц.объекты
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
10.04.2011, 07:34     Вектор объектов класса и алгоритмы #5
Сравнение должно быть однозначным. Т.е, если A < B и B < C, то A < C. Как именно происходит сравнение, алгоритмам безразлично. Хоть по двадцати полям сравнивай.
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
10.04.2011, 21:29  [ТС]     Вектор объектов класса и алгоритмы #6
Кто-нибудь может мне помочь?
Unforgiven_00
60 / 60 / 2
Регистрация: 12.10.2010
Сообщений: 129
10.04.2011, 21:33     Вектор объектов класса и алгоритмы #7
Цитата Сообщение от РагнаР Посмотреть сообщение
Кто-нибудь может мне помочь?
Прочтите книгу Б. Еккеля. Там это все очень хорошо расписано.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2011, 17:54     Вектор объектов класса и алгоритмы
Еще ссылки по теме:

Как сортировать вектор объектов по определенному полю? C++
C++ Реализовать подсчет количества объектов класса, используя статическую переменную-член класса
C++ Вектор объектов класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
11.04.2011, 17:54  [ТС]     Вектор объектов класса и алгоритмы #8
Цитата Сообщение от Unforgiven_00 Посмотреть сообщение
Прочтите книгу Б. Еккеля. Там это все очень хорошо расписано.
Спасибо за совет, действительно хорошая книга.
Yandex
Объявления
11.04.2011, 17:54     Вектор объектов класса и алгоритмы
Ответ Создать тему
Опции темы

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