18 / 18 / 15
Регистрация: 05.03.2016
Сообщений: 67
1

Как заставить std::set хранить объекты пользовательского типа?

22.10.2016, 20:34. Показов 4923. Ответов 4
Метки нет (Все метки)

Здравствуйте. Как заставить set хранить объекты некоторого класса или структуры?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <iterator>
#include <set>
 
using namespace std;
 
class test
{
private:
        int some;
public:
        test(int arg) : some(arg) { }
};
 
int main()
{
    set<test> myset;
 
    test *obj = new test(1);
 
    myset.insert(obj); // !
 
    delete obj;
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2016, 20:34
Ответы с готовыми решениями:

Каким компонентом и как вывести std::list параметризованный объектом пользовательского типа?
Создал класс: class Dannie { public: int Et; int EtMy; int KK; int KKMy; double P;...

Перегрузить operator*() для перемножения матриц (объекты пользовательского типа Matrix)
Помогите доделать программу. Там нужно всего пару ошибок исправить... У меня уже мозг взрывается(((...

Почему с помощью std::cin не получается считать с клавиатуры массив пользовательского типа?
Доброго времени суток! Нашёл приме объвления класса комп. чисел и выполнения основных операций. Я...

Переопределение оператора "меньше" пользовательского типа для работы с set
Понимаю, что чтобы хранить в set элементы некоторого класса, нужно переопределить оператор &lt; для...

4
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
22.10.2016, 20:37 2
Убери указатель.
C++
1
2
3
4
5
    set<test> myset;
 
    test obj(1);
 
    myset.insert(obj);
Добавлено через 1 минуту
Даже проще можно:
C++
1
2
    set<test> myset;
    myset.insert(test(1));
1
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
22.10.2016, 20:44 3
Можно хранить и указатели на объекты...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <set>
 
class test {
    int some;
 
public:
    test( int arg ) : some( arg ) {}
};
 
int main() {
    std::set <test *> my_set;
    test * obj = new test( 1 );
    my_set.insert( obj );
    delete obj;
}
1
С чаем беда...
Эксперт CЭксперт С++
10008 / 5354 / 1467
Регистрация: 18.10.2014
Сообщений: 12,911
22.10.2016, 21:40 4
Лучший ответ Сообщение было отмечено castaway как решение

Решение

Цитата Сообщение от SimonR Посмотреть сообщение
Как заставить set хранить объекты некоторого класса или структуры?
Чтобы заставить std::set хранить объекты некоторого класса, надо научить std::set сравнивать объекты этого класса. Для этого надо либо написать свой сравнивающий предикат, либо специализировать стандартный предикат, либо переопределить оператор < для этого класса.

У вас в коде этого не сделано, поэтому в таком виде ваш класс в std::set храниться не сможет.
3
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
13.04.2017, 23:27 5
C++
1
 std::set<std::unique_ptr<test>, std::function<bool(test const&, test const&)> > my_set(/*тут определяем предикат*/);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2017, 23:27
Помогаю со студенческими работами здесь

STL std::set, std::pair, std::make_pair
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на название темы....

Создать шаблонный класс-контейнер Array, который представляет собой массив, позволяющий хранить объекты заданного типа
Здравствуйте, подскажите пожалуйста, как правильно инициализировать данный класс. Новый год в...

Шаблон как тип контейнера std::set
template&lt;class T&gt; int func(T&amp;, int); typedef std::ostream_iterator&lt;int&gt; out_in; int main() { ...

Как хранить объекты разных классов в одном контейнере
Здравствуйте! Хочу реализовать хранение разных классов(базовый и наследник) в одном контейнере....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru