powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вектора обьектов класса. Максимальный элемент.
6 сообщений из 6, страница 1 из 1
Вектора обьектов класса. Максимальный элемент.
    #34361083
_Andrew_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задумка такая. Есть вектор обьектов класса. Класс содержит члены типа int. Необходимо найти максимальное значение определенного члена среди обьектов вектора. Для этого хотелось бы написать функцию. Но не понятно какие параметры ей передавать. Если в качестве параметра передавать вектор, то тогда такие функции прийдется писать для каждого члена класса. В качестве упрощеного примера:
Описание класса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class RouteRec
      {
      public:
      int Route1,Route2,Route3, Route4,Route5,Route6;
      };
 class Parts
    {
    public:
    int Quantity;
    String Name;
    RouteRec Route;
    };
Cоздаем вектор обьектов класса Parts. Поиск макс элемента необходимо осуществить для членов
Route1, Route2, Route3, Route4, Route5, Route6. Например, функция MaxElement для члена Route1 могла бы быть такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
vector <Parts> Part;

int MaxElement(vector <Parts> Vect)
{
int max;
max =Vect[ 0 ].Route.Route1;
for (int i= 1 ;i<Vect.size();++i)
 if (Vect[i].Route.Route1>max)
  {
  max=Vect[i].Route.Route1;
  }
  return max;
}
Подскажите как сделать такую функцию более универсальной. Что ей передавать в качестве параметра? Это вообще реально сделать?
...
Рейтинг: 0 / 0
Вектора обьектов класса. Максимальный элемент.
    #34361240
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо модернизировать RouteRec.

Или массив интов делать, или сделать в нем метод доступа к свойству класса по индексу. Кстати, можно делать не метод, а отдельную функцию, которая по индексу будет возвращать указатель или ссылку на свойство:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
int &RouteRec::ret(int i) {
   switch (i) {
       case  0 :
        return Riute1;

}

int &ret(RouteRec &rr, int i) {
   switch (i) {
       case  0 :
        return rr.Route1;

}
...
Рейтинг: 0 / 0
Вектора обьектов класса. Максимальный элемент.
    #34361398
IMil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без модернизации класса или дополнительной функции действительно не обойтись. Просто так по имени члена ссылку на него в С++ не получить.

Кстати, советую для поиска использовать стандартные средства.
Примерно так (компилятора под рукой нет, возможны опечатки)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
std::vector <Parts> parts;

bool part_less(const Parts & first, const Parts & second)
{
  return first.Route1 < second.Route1;
}

const Parts & max_part = * ( std::max_element(parts.begin(), parts.end(), parts_less) );
...
Рейтинг: 0 / 0
Вектора обьектов класса. Максимальный элемент.
    #34361570
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и последний штрих, чтоб точно никто ничего не понял:)
template<>
bool less<Parts>(const Parts & first, const Parts & second)
{
return less(first.Route1, second.Route1);
}
...
Рейтинг: 0 / 0
Вектора обьектов класса. Максимальный элемент.
    #34361780
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Andrew_NЗадумка такая. Есть вектор обьектов класса. Класс содержит члены типа int. Необходимо найти максимальное значение определенного члена среди обьектов вектора. Для этого хотелось бы написать функцию. Но не понятно какие параметры ей передавать. Если в качестве параметра передавать вектор, то тогда такие функции прийдется писать для каждого члена класса. В качестве упрощеного примера:
Описание класса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class RouteRec
      {
      public:
      int Route1,Route2,Route3, Route4,Route5,Route6;
      };
 class Parts
    {
    public:
    int Quantity;
    String Name;
    RouteRec Route;
    };
Cоздаем вектор обьектов класса Parts. Поиск макс элемента необходимо осуществить для членов
Route1, Route2, Route3, Route4, Route5, Route6. Например, функция MaxElement для члена Route1 могла бы быть такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
vector <Parts> Part;

int MaxElement(vector <Parts> Vect)
{
int max;
max =Vect[ 0 ].Route.Route1;
for (int i= 1 ;i<Vect.size();++i)
 if (Vect[i].Route.Route1>max)
  {
  max=Vect[i].Route.Route1;
  }
  return max;
}
Подскажите как сделать такую функцию более универсальной. Что ей передавать в качестве параметра? Это вообще реально сделать?

Можно Route1,Route2,Route3, Route4,Route5,Route6
хранить кадый в своем сортированном вектрторе,
а в RouteRec хранить их индексы.
Указатели на эти вектора вожно хранить в отдельном векторе
и по его индексу выбирать номер необходимого Route.
Так искать можно будет быстрее.
Но добавлять дольше.

Можно завести мультимапы.
Для этого создается класс-интерфейс который будет хранится в мультимапе.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class RouteRecIf1
{
int s_idx; // индекс RouteRec в векторе
...
// Сравнение RouteRec по Route1
bool operator>(const RouteRecIf1& f_Rec) const;
bool operator<(cosnt RouteRecIf1&  f_Rec) const;
bool operator==(const RouteRecIf1&  f_Rec) const ;

operator int (); // возвращает значение  Route1 из вектора RouteRec по индексу s_idx
};

Для каждого RouteRecIf1, RouteRecIf2 ..... создается обьект multimap
При добавлении элемента Parts он должен создать соответствующие RouteRecIf
и разместить их в в соответствующем multimap.

Каждый Route будет отсортирован в мультимапе автоматически через класс-интерфейс.
Поиск минимального максимального или вообще по значению Route
будет производится довольно быстро.
Указатели на мультимапы можно тоже держать в векторе
где индекс соответствует номеру Route.

Если сумбурно получилось, и есть вопросы задавайте.
...
Рейтинг: 0 / 0
Вектора обьектов класса. Максимальный элемент.
    #34364117
_Andrew_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы, буду переваривать
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вектора обьектов класса. Максимальный элемент.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]