Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
#1

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

09.04.2011, 23:58. Просмотров 1956. Ответов 7
Метки нет (Все метки)

Просветите, пожалуйста, по вопросу:
Пусть у нас есть класс, к примеру такой
C++
1
2
3
4
5
class myclass
{
int a,
double b
}
со всеми необходимыми конструкторами
Пусть у нас создан и заполнен вектор объектов класса
Как теперь написать условия алгоритмов, чтобы можно было работать, к примеру, только с одной переменной из класса? То есть, как пример, сортировку по первой и сортировку по второй переменной.
Я могу написать функцию перегрузки < для сравнения по первой переменной, но для второй так нельзя.
И еще вопрос, как мне задать предикат для find_if, чтобы сравнивать, к примеру, переменную а с каким-то числом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2011, 23:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор объектов класса и алгоритмы (C++):

Вектор из объектов класса - C++
Добрый вечер) Подскажите пж, что не так? Вот код программы: В файле class.h: #ifndef CLASS_H_INCLUDED #define...

Вектор объектов класса - C++
Всем привет! Несколько недель назад я писал сюда по поводу одной задачи. Она заключается в том, чтобы реализовать класс &quot;Зоомагазин&quot; с...

Вектор объектов пользовательского класса - C++
Привет всем! Есть класс Automaton, я пытаюсь создать вектор Sample с объектами этого класса, а они ведут себя не так, как я ожидаю -...

Отсортировать вектор объектов класса по определенному полю - C++
Нужно отсортировать вектор word объектов objectW по полю length. В 42 строке пытаюсь это сделать, но что-то явно не то. Подскажите...

Построение описания класса, создание и уничтожение объектов этого класса - C++
Построить описание класса, содержащего информацию о почтовом адресе организации. Предусмотреть возможность раздельного изменения...

Реализовать подсчет количества объектов класса, используя статическую переменную-член класса - C++
как реализовать подсчет количества объектов класса (используя статическую переменную-член класса), а также статическую функцию, которая...

7
Ma3a
Эксперт С++
618 / 462 / 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());
0
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));
И еще, почему не выходит по второй переменной сортировать?
1
РагнаР
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 27
10.04.2011, 01:04  [ТС] #4
По второй переменной нет сортировки, потому что для нее не перегружен оператор сравнения.

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

Массив объектов класса. Печать строк-членов класса. - C++
подскажите, как распечатать строки? #include &quot;myString.h&quot; #include &lt;iostream&gt; #define stop __asm nop void main() { ...

Массив объектов класса как член другого класса - C++
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Инициализация объектов класса в конструкторе другого класса - C++
У меня есть класс Subscriber,в котором есть несколько объектов другого класса Date,мне нужно,чтобы при создании Subscriber объекты класса...

Используя вектор и заданные алгоритмы, выполнить указанную задачу - C++
Задание: Дан вектор, содержащий не менее 3 элементов. Решить эту задачу, используя 1 вызов алгоритма make_heap и цикл из трех итераций, в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru