Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL->map, map->operator[] 
V
    Опции темы
Dr_VOLAND
  Дата 16.9.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

Репутация: 0
Всего: 0



Всем доброе время суток! 
Читал я вчера книгу хорошую по сям, автора Шилдта. В главе посвященной STL, в теме про ассоциативные списки (map)… 
встретил функцию-член: reference operator[] (const key_type &i).
Написал код:
Код

class param
{
public:
    long  povtor, p, l;
    param()
    {
        povtor=0;
        p=0;
        l=0;
    }
};

/////////////////////////////////////////////////////// 

int main()
{
    FILE *in,*out;
    
    map<long,param> obj;
    map<long,param>::iterator rt;
    param f;
    f.povtor = 4;
    obj.insert(pair<long,param>(4,f));
    f.povtor = 23;
    obj.insert(pair<long,param>(23,f));
    f.povtor = 5;
    obj.insert(pair<long,param>(5,f));

    //cout<<obj.size()<<endl;
64:    rt = obj.operator[](1);

return 0;    
}


В итоге ошибка:
E:\proglang\Microsoft Visual Studio\MyProjects\temp\temp.cpp(64) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class param' (or there is no acceptable conversion)

В чем ошибка?  :-(

Это сообщение отредактировал(а) Dr_VOLAND - 16.9.2007, 14:13
PM MAIL   Вверх
Greeen
Дата 16.9.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Во первых какой смысл писать operator[](1) если можно operator[1]
Во вторых operator[1] вернет тебе значение типа param для ключа "1". Для твоего случая в map'е нет ключей равных "1" поэтому тебе вернется param со значениями, заданными в конструкторе по умолчанию. 


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
Dr_VOLAND
Дата 16.9.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

Репутация: 0
Всего: 0



Спасибо! ))

Правильно будет вот так:
Код

int main()
{
    FILE *in,*out;
    
    map<long,param> obj;
    map<long,param>::iterator rt;
    param f;
    f.povtor = 4;
    obj.insert(pair<long,param>(4,f));
    f.povtor = 23;
    obj.insert(pair<long,param>(23,f));
    f.povtor = 5;
    obj.insert(pair<long,param>(5,f));

    f = obj.operator[](4);
    cout<<f.povtor<<endl;

return 0;    
}


Относительно записи, корректно все же вот так: operator[](i)
PM MAIL   Вверх
Любитель
Дата 16.9.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



1. 
Код

obj.operator[](1); // или
obj[1]; // что лучше читается?


2. Оператор [] std::map вернёт тип, заданный дл значения мэпа, но не итератор. Для последнего - смотри в сторону find.


--------------------
PM MAIL ICQ Skype   Вверх
Dr_VOLAND
Дата 16.9.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

Репутация: 0
Всего: 0



Да! Вы правы любитель!))
Так лучше читается… я просто пробовал варианты operator(4), operator[4], а єто неправильная запись.
Ключи ведь хранятся в массиве.

Это сообщение отредактировал(а) Dr_VOLAND - 16.9.2007, 14:29
PM MAIL   Вверх
zkv
Дата 16.9.2007, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Dr_VOLAND @  16.9.2007,  14:28 Найти цитируемый пост)
Ключи ведь хранятся в массиве.

какой массив, нет тут ничего даже близко похожего на массив
PM MAIL   Вверх
Dr_VOLAND
Дата 16.9.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 16.9.2007

Репутация: 0
Всего: 0



Ок! Всегда найдется умник. ))
«… в классе map»

Это сообщение отредактировал(а) Dr_VOLAND - 16.9.2007, 15:39
PM MAIL   Вверх
zkv
Дата 17.9.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(Dr_VOLAND @  16.9.2007,  15:38 Найти цитируемый пост)
Ок! Всегда найдется умник.

вы мне льстите, сударь.

хорошо, что они находятся.
благодаря умникам я сам вылечился от многих заблуждений  smile

Это сообщение отредактировал(а) zkv - 17.9.2007, 23:54
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.