Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2013, 19:39   #1
Leiph
Пользователь
 
Регистрация: 30.06.2010
Сообщений: 20
По умолчанию Определение оператора < в структуре из двух int

Здравствуйте!
Есть такой шаблон как set (к примеру, объявлен set < My_struct> pairs ), который умеет относительно быстро определять входить ли указанный элемент в набор на данный момент или нет ( это ф-я pairs.find(p) ). Для того что бы метод find работал на произвольном типе данных ( скажем, My_struct ) необходимо определить в нем операцию " < ".
Вопрос как определить этот оператор для структуры из пары чисел типа int? Причем, необходимо сделать так, что бы ,например, пара 4 и 7 была бы равна паре 7 и 4. В конечном счете, в наборе должны находиться уникальные пары чисел. Спасибо за внимание.
Leiph вне форума Ответить с цитированием
Старый 05.09.2013, 20:48   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Leiph Посмотреть сообщение
Причем, необходимо сделать так, что бы ,например, пара 4 и 7 была бы равна паре 7 и 4.
Что вообще за задача такая, где пары без учёта порядка? Тут set как-то не в тему. Но если уж очень хочется, тогда, раз порядок в паре не имеет значения, можно все эти пары нормализовать перед использованием, чтобы первое число было не больше второго, и тогда вообще можно std::pair использовать.
Somebody вне форума Ответить с цитированием
Старый 05.09.2013, 21:04   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если решать на уровне вашей структуры, и порядок элементов не важен, то можно, например, так:
Код:
struc My_struct
{
My_struct(int aa, int bb): a(std::min(aa, bb)), b(std::max(aa, bb));
//без списка инициализации: My_struct(int aa, int bb) { (aa < bb) ? a = aa, b = bb : a = bb, b = aa; }
My_struct(const My_struct& ms): a(std::min(ms.a, ms.b)), b(std::max(ms.a, ms.b));   //Это и следующее - на случай если пользователь поменяет значение членов между созданием объекта и добавлением в множество
My_struct& operator=(const My_struct& ms)
 { 
 if( &ms != this)   //В данном примере вообще-то излишнее сравнение, но вообще полезное
  {/*то же самое*/} 
 }
bool operator<(const My_struct& ms)
 {
 if (a < ms.a)
  return true;
 if (a == ms.a && b < ms.b)
  return true;
 return false;
 }
int a, b;
};
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись "0" в поле int в Структуре (Си) Kruudash Помощь студентам 1 24.05.2013 00:24
Определение длинны Int vl_zemtsov Общие вопросы C/C++ 3 21.06.2012 20:20
Программы с использованием условного оператора и оператора выбора. Задачи по Delphi. Не могу сделать 4 программу Bovi4 Помощь студентам 0 25.10.2011 20:15
функция float average(int arrray[],int from,int to) yuliyayuliya Помощь студентам 0 25.04.2011 21:55
Среди двух переменных а и в, не применяя оператора найти наибольшее ulaza Помощь студентам 13 21.01.2010 09:16