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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2018, 19:41   #1
Siniy_pled
Новичок
Джуниор
 
Регистрация: 19.02.2018
Сообщений: 2
По умолчанию set множества и операции

вот я создал структуру photo и переменную этой структуры массив pa[i].Как мне теперь сделать множество структур?
я пишу:
set<photo> a,b;
a.insert(pa[0]);


А оно выдаёт ошибку в файле stl_set.h
Что я не так делаю?
И как еще потом сделать объединение, пересечение, дополнение?

Последний раз редактировалось Siniy_pled; 19.02.2018 в 20:02.
Siniy_pled вне форума Ответить с цитированием
Старый 19.02.2018, 21:40   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Siniy_pled Посмотреть сообщение
Что я не так делаю?
Вы не показываете код и не говорите какую ошибку выдает.
waleri вне форума Ответить с цитированием
Старый 20.02.2018, 03:48   #3
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Не знаю этой темы, но думаю, для использования структуры в качестве элемента множества, необходимо для типа структуры определить операторы сравнения.
СтудПом вне форума Ответить с цитированием
Старый 20.02.2018, 11:22   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Так вроде бы структуры и не могут быть элементами множества. А почему не массив структур ?
http://kvodo.ru/sets-in-pascal.html
http://mirznanii.com/a/114939/tipy-dannykh-v-paskale
digitalis вне форума Ответить с цитированием
Старый 21.02.2018, 02:37   #5
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Так вроде бы структуры и не могут быть элементами множества
Для множества можно использовать любые типы и структуры, если для них определена хотя бы операция "<".
Теоретически, элементам множества не надо быть скалярами. А операция сравнения больше/меньше необходима только технически - для эффективной реализации операций над множествами: объединение, пересечение, вычет, не знаю что там ещё есть или должно быть.
СтудПом вне форума Ответить с цитированием
Старый 21.02.2018, 18:23   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Да, я не учел, что вопрос в разделе С/С++, и привел ссылку на Паскаль. В Си с множествами дел не имел.
digitalis вне форума Ответить с цитированием
Старый 23.02.2018, 16:56   #7
Siniy_pled
Новичок
Джуниор
 
Регистрация: 19.02.2018
Сообщений: 2
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Вы не показываете код и не говорите какую ошибку выдает.
вот такое я сделал.Сделал кое-как компаратор, но операции не работаю над множествами
Код:
#include<iostream>
#include<set>
#include<vector>
using namespace std;
struct photo
{ 

	int god;
	/*char firm;
	char model;
	int price;
	int zoom;
	char format;
	int ves;
	int pixels;*/
} pa[9];

void vvod(int k)
{
for(int i=0;i<=k;i++)
{	

	cout<<"god?";
	cin>>pa[i].god;
/*	cout<<"firm?";
	cin>>pa[i].firm;
	cout<<"model";
	cin>>pa[i].model;
	cout<<"price?";
	cin>>pa[i].price;
	cout<<"zoom?";
	cin>>pa[i].zoom;
	cout<<"format?";
	cin>>pa[i].format;
	cout<<"ves?";
	cin>>pa[i].ves;
	cout<<"pixels?";
	cin>>pa[i].pixels;*/
}
	
}
void clear()
{
    system("cls");
}

bool operator <(const photo& lhs, const photo& rhs)
{
    return (lhs.god < rhs.god) || ((!(rhs.god < lhs.god)) && (lhs.god < rhs.god));
}





int main()
{	
vvod(3);
clear();

set<photo> a,b,c;
a.insert(pa[0]);
a.insert(pa[1]);
b.insert(pa[2]);
b.insert(pa[3]);
}
Siniy_pled вне форума Ответить с цитированием
Старый 23.02.2018, 17:00   #8
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
В Си с множествами дел не имел.
А в Си и нет множеств. set - это контейнер из STL C++.
СтудПом вне форума Ответить с цитированием
Старый 24.02.2018, 23:12   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Цитата:
Сообщение от СтудПом Посмотреть сообщение
А в Си и нет множеств
вот потому там с ними делов и не имел Только в Паскале.
digitalis вне форума Ответить с цитированием
Старый 25.02.2018, 09:29   #10
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

А в С++ это только название похожее. На самом деле это хеш с уникальным ключем и без значения.
Действия над множествами нужно реализовывать самостоятельно.

Но...есть набор алгоритмов, которые работают с любыми контейнерами вообще (не только set), например

http://www.cplusplus.com/reference/a..._intersection/

Для вашего кастомного класса/структуры, возможно стоит определить хеширующую функцию хорошую.

Последний раз редактировалось alexzk; 25.02.2018 в 09:34.
alexzk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
тип Set(множества)(Pascal) fozjka Помощь студентам 0 22.05.2013 17:26
Множества (Set) zeil94 Паскаль, Turbo Pascal, PascalABC.NET 1 14.12.2012 07:50
Pascal ABC. Множества. Сформировать два множества из M и N элементов случайным образом. powersej Паскаль, Turbo Pascal, PascalABC.NET 0 13.12.2012 21:08
Pascal ABC. Множества. Сформировать два множества из M и N элементов случайным образом. powersej Помощь студентам 0 13.12.2012 20:58
Множества и операции над ними.Паскаль ШМЫГА Фриланс 7 27.02.2011 09:18