Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tit_Vlad
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 28
#1

Получение объекта из множества - C++

18.11.2013, 17:23. Просмотров 232. Ответов 7
Метки нет (Все метки)

Здравствуйте!
У меня есть класс с множеством
C++
1
2
3
4
5
6
7
8
9
10
11
class AutoShop
{
    string name;
    string address;
    int amountCarsSold;
    double gainsMoney;
    set<Manager> managerSet;
    set<Client> clientSet;
    set<AutoConfiguration> autoConfigurationSet;
...
}
в AutoConfiguration есть поле id
C++
1
2
3
4
5
class AutoConfiguration
{
    int id;
...
}
Мне нужно получить объект множества по определенному id. Вот что я делал:
C++
1
2
3
4
5
6
7
8
9
10
11
template<class T> T& getObj(int _id)
    {
        set<T>::iterator iter;
        iter=getSet<T>().begin();
        while(iter!=getSet<T>().end())
        {
            if((*iter).getId()==_id)
                return *iter;
            iter++;
        }
    }
Так я ее вызывал:
C++
1
getObj<AutoConfiguration>(id);
Получал такую ошибку: error C2440: 'return' : cannot convert from 'const AutoConfiguration' to 'AutoConfiguration &'
Попытался вернуть итератор на объект, как в алгоритме find():
C++
1
2
3
4
5
6
7
8
9
10
template<class inpIter, class T> inpIter getObj(const int _id)
    {
        set<T>::iterator iter;
        iter=getSet<T>().begin();
        while(iter!=getSet<T>().end())
        {
            if((*iter++).getId()==_id)
                return iter;
        }
    }
Вызывал так:
C++
1
2
set<AutoConfiguration>::iterator iter;
        iter=getObj<set<AutoConfiguration>::iterator, AutoConfiguration>(id)
все скомпилилось, но когда начал работать с объектом
C++
1
(*iter).addModification();
выдало такую ошибку: error C2662: 'AutoConfiguration::addModification' : cannot convert 'this' pointer from 'const AutoConfiguration' to 'AutoConfiguration &'
Можете объяснить почему this константный и как это исправить что бы я мог работать с объектом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 17:23     Получение объекта из множества
Посмотрите здесь:

XML и получение объекта по id - C++
Требуется прочитать XML документ, выкусить из него элементы с заданными id и обработать. Элементы могут быть составными. Вопрос: чем это...

Получение предыдущего объекта из списка (std::list) - C++
#include &lt;Iostream&gt; int main() { std::list&lt;COORD*&gt; coords; COORD* pCoord; for(uint16 i = 0; i &lt; 10; ++i) ...

Реализовать распознание объекта из некоторого множества (расширяемого) на основе вопросов и ответов - C++
Необходимо решить задачу на С++ Реализовать распознание объекта из некоторого множества (расширяемого) на основе вопросов и ответов....

Получение адреса объекта после обнуления указателя на этот объект - C++
Добрый вечер уважаемые программисты. Интересует следующий вопрос. Есть ли способ получить адрес объекта, после того, как указатель на него...

Метод get_Value объекта Range, Получение значении ячеек из Excel - C++
Добрый день. Метод get_Value объекта Range (Excel), содержащего одну ячейку, возвращает значение этой ячейки в переменную типа...

множества - C++
Даны два множества А и В. Организовать представление множеств в виде линейных однонаправленных списков. Мощность множеств и элементы...

множества - C++
помогите найти ошибку надо найти точки пересечения множеств вот мой код: #include &lt;iostream&gt; #include &lt;set&gt; #include &lt;algorithm&gt;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
18.11.2013, 17:27     Получение объекта из множества #2
Обьект в std::set хранится как const T, поэтому вернуть T& не получится, но можно вернуть const T&.
Соответственно после обьект типа const T& может вызывать только const методы.
Tit_Vlad
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 28
18.11.2013, 17:37  [ТС]     Получение объекта из множества #3
то есть если у меня есть множество с объектами типа AutoConfiguration
set<AutoConfiguration> autoConfigurationSet;
то я не могу в этих объектах ничего изменить или добавить?

Добавлено через 3 минуты
что делают в таких ситуациях, если мне нужно потом работать с данными хранящимися в AutoConfiguration?
Peregrin
33 / 33 / 1
Регистрация: 16.11.2012
Сообщений: 59
18.11.2013, 17:44     Получение объекта из множества #4
Возможно поможет const_cast: http://www.cplusplus.com/doc/tutorial/typecasting/
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
18.11.2013, 17:49     Получение объекта из множества #5
Цитата Сообщение от Tit_Vlad Посмотреть сообщение
что делают в таких ситуациях, если мне нужно потом работать с данными хранящимися в AutoConfiguration?
Используют другой контейнер, например, std::vector. Зачем вам std::set и какие у вас определения operator < для хранимых в std::set элементов?
Tit_Vlad
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 28
18.11.2013, 18:17  [ТС]     Получение объекта из множества #6
operator < определяется по id
bool AutoConfiguration::operator<(const AutoConfiguration& _autoConfiguration)const
{
if(id<_autoConfiguration.id)
return true;
return false;

}
set брался потому что предполагается много опеарций поиска

Добавлено через 13 минут
Спасибо!)
const_cast помог, привожу пример:
C++
1
2
3
4
5
6
7
8
9
10
11
template<class T> T* getObj(int _id)
    {
        set<T>::iterator iter;
        iter=getSet<T>().begin();
        while(iter!=getSet<T>().end())
        {
            if((*iter).getId()==_id)
                return const_cast<AutoConfiguration*>(&(*iter));
            iter++;
        }
    }
Вызов:
C++
1
getObj<AutoConfiguration>(id)->addModification();
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
18.11.2013, 19:03     Получение объекта из множества #7
getSet<T>()
как выглядит этот метод?

Добавлено через 29 минут
хотя я немного не то спросил
использовать const_cast - немного кривое решение. Не вижу безвыходной ситуации, которая бы вынудила так делать
почему бы не перейти на std::map? ключом будет id, как и раньше. и не надо магии с констами и прочим
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 19:11     Получение объекта из множества
Еще ссылки по теме:

Множества - C++
Помогите решить задачку. Задан некоторый набор товаров. Определить для каждого из товаров, какие из них имеются в каждом из п магазинов,...

Множества - C++
не могу справиться!! Известны марки машин, изготовляемых в данной стране и импортируемых за рубеж. Даны некоторые n стран. Опре-делить для...

Множества - C++
Составить программу, возвращающую множество, за- данное некоторой последовательностью произвольных чи- сел натурального ряда, вводимых...

Множества - C++
Помогите пожалуйста создать программу, которая упорядочивает существующие множества и определяет объединение двух множеств, порядка 7 и 12.

Множества. - C++
Добрый день. Лаба. Прошу взглянуть, подсказать как это решают. Хоть примерный алгоритм ну или другую посильную помощь. Цель работы:...


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

Или воспользуйтесь поиском по форуму:
Tit_Vlad
0 / 0 / 0
Регистрация: 18.03.2013
Сообщений: 28
18.11.2013, 19:11  [ТС]     Получение объекта из множества #8
Спасибо, запомню на будущее и буду использовать map, но сейчас не хочется переписывать существующий код.
Yandex
Объявления
18.11.2013, 19:11     Получение объекта из множества
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru