60 / 60 / 6
Регистрация: 28.05.2012
Сообщений: 222
1

QSet. Добавление указателей на значение

28.05.2012, 15:19. Показов 1498. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Программирую под Qt 4.7, поэтому возник вопрос по использованию QSet. При программировании с использованием stl можно сделать следующее:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <set>
#include <iostream>
 
/* Предикат. */
class CPredicate
{
public:
    bool operator()(int *val1, int *val2) { return *val1 != *val2; }
};
 
/* Множество. */
typedef std::set<int*, CPredicate> set_t;
 
/* Оператор для вывода множества. */
std::ostream &operator <<(std::ostream &out, const set_t &set)
{
    set_t::const_iterator it;
    for (it = set.begin(); it != set.end(); ++it)
        out << **it << ' ';
 
    return out;
}
 
/* Основная функция. */
int main()
{
    int *arr[] = {new int(1), new int(2), new int(3), new int(2), new int(4)};
    set_t test;
 
    test.insert(arr[0]);
    test.insert(arr[1]);
    test.insert(arr[2]);
 
    std::cout << "1: " << test << std::endl;
 
    test.insert(arr[3]);
    test.insert(arr[4]);
 
    std::cout << "2: " << test << std::endl;
 
    for (int i = 0; i < 5; ++i)
        delete arr[i];
 
    return 0;
}
т.е. можно добиться чтобы добавлялись только указатели на элементы с разными значениями. Вопрос как можно сделать подобное с использованием Qt? В документации к Qt посмотрел, но ничего подобного не нашел.

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2012, 15:19
Ответы с готовыми решениями:

Нет доступа к элементам QSet в QList<QSet>
Господа, прошу вашей помощи, суть в проблеме с добавлением элемента в Qset, но обо всем по порядку:...

QSet указателей на объекты класса, сортированный по полю класса
Здравствуйте. Возьмём тестовый класс: class TEST { public: TEST(); QString name; } ...

QSet в Combobx
Всем привет! Столкнулся со следующей проблемой попытался в комбобокс засунуть контейнер QSet ...

Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей
Здравствуйте. Помогите, пожалуйста, разобраться с одним большим заданием. Задание пока в процессе...

6
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.05.2012, 15:44 2
обернуть указатель в структуру, типа
C++
1
2
3
4
5
6
7
struct MyIntPtr {
    int* ptr; 
    bool operator == (const MyIntPtr& val2) 
    {
         return *ptr != *val2.ptr; 
    } 
};
но для сета так же требуется функция qHash, не знаю где её определить
1
60 / 60 / 6
Регистрация: 28.05.2012
Сообщений: 222
28.05.2012, 15:55  [ТС] 3
Цитата Сообщение от Jupiter Посмотреть сообщение
обернуть указатель в структуру, типа
C++
1
2
3
4
5
6
7
struct MyIntPtr {
    int* ptr; 
    bool operator == (const MyIntPtr& val2) 
    {
         return *ptr != *val2.ptr; 
    } 
};
но для сета так же требуется функция qHash, не знаю где её определить
Наверное придется так и сделать. Но неужели нет такого же простого, быстрого и элегантного способа как в stl?
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
28.05.2012, 16:09 4
а чем stl не нравится? Qt-шные объекты в контейнеры влезают хорошо (в смысле допилены по всем пребованиям), кроссплатформенность сохраняется, че еще то надо?
1
60 / 60 / 6
Регистрация: 28.05.2012
Сообщений: 222
28.05.2012, 16:50  [ТС] 5
Цитата Сообщение от oxotnik Посмотреть сообщение
а чем stl не нравится? Qt-шные объекты в контейнеры влезают хорошо (в смысле допилены по всем пребованиям), кроссплатформенность сохраняется, че еще то надо?
Ну это уже крайняя мера. Все таки будет как-то некрасиво смотреться когда половина будет написана с использованием Qt, а половина с использованием stl.
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
28.05.2012, 17:02 6
Цитата Сообщение от Demy85 Посмотреть сообщение
Все таки будет как-то некрасиво смотреться когда половина будет написана с использованием Qt, а половина с использованием stl.
ИМХО, при правильно построенной архитектуре, дальнейшие разработчики только спасибо скажут, ибо можно будет безболезненно избавиться от Qt и перевести проект, к примеру, на MFC или другую морду.
1
60 / 60 / 6
Регистрация: 28.05.2012
Сообщений: 222
29.05.2012, 12:12  [ТС] 7
Из вышесказанного я понял что есть два явных способа решения:
1. Исполшьзовать QSet и обертывать указатели, перегружая ==;
2. Использовать std::set.

Всем большое спасибо за ответы.
0
29.05.2012, 12:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2012, 12:12
Помогаю со студенческими работами здесь

Добавление в программу указателей
Необходимо в этом коде использовать указатели. Начал изучать указатели, не знаю где применить. ...

Запись QSet в QFile
нужно записать множества QSet в QFile пробовал так set1 &lt;&lt; &quot;Lorem&quot; &lt;&lt; &quot;Ipsum&quot; &lt;&lt;...

Инициализировать QSet<QChar> символами из строки
В C# я могу написать так: HashSet&lt;char&gt; vowels = new HashSet&lt;char&gt;(&quot;аеёиоуыэюя&quot;); Можно ли...

Значение указателей в условии оператора
Добрый вечер, наткнулся на вроде бы донельзя тривиальную вещь, но все же непонятную: int ival =...


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

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

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