Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как заполнить map?


Автор: Гость05 25.10.2005, 11:21
Всем привет!

требуется функция в которая должна заполнять передаваемый std::map<int, myClass>, что передать сам map или &map, если второе то какой синтаксис заполнения map'а должен быть, как должна будет выглядеть данная конструкция:

Код

mapMy[i] = myClass(ля-ля-ля);


Спасибо.

Автор: Dark Elf 25.10.2005, 11:23
Да по-моему так же должна выглядеть - а что именно у тебя не работает?

Автор: Guest 25.10.2005, 11:36
Dark Elf
ответ в контексте вопроса несколько расплывчат

если в функцию передается map то компилиться нормально, но насколько верно передавать сам map, а не ссылку на него?
Код

function func(map mapMy)
{
    ...
    mapMy[i] = myClass(ля-ля-ля);
    ...
}

так ошибка:
Код

function func(map* mapMy)
{
    ...
    mapMy[i] = myClass(ля-ля-ля);
    ...
}

Автор: _hunter 25.10.2005, 11:44
верно передавать что мапу что ссылку на нее ( торого я у тебя не увидел ( вместо этого ты зачем то передаеш указатель... ) )

Автор: Гость05 25.10.2005, 11:52
_hunter
поправте если я не прав но разве способ передачи не таков:

Код

function func(map* mapMy)
{
    ...
    mapMy[i] = myClass(ля-ля-ля);
    ...
}

void main(void)
{
    ...
    map<int, myClass> myMap;
    ...
    func(&myMap);
    ...
}


если все таки я передаю ссылку на map то каков синтаксис обращения к его элементам?

Автор: Vyacheslav 25.10.2005, 12:01
Код

function func(map<int, myClass>& mapMy)
{
    ...
    mapMy[i] = myClass(ля-ля-ля);
    ...
}

void main(void)
{
    ...
    map<int, myClass> myMap;
    ...
    func(myMap);
    ...
}




или

Код

function func(map<int, myClass>* mapMy)
{
    ...
    mapMy->insert( map<int, MyClass>::value_type( i, myClass(ля-ля-ля) ) );
    ...
}

void main(void)
{
    ...
    map<int, myClass> myMap;
    ...
    func(&myMap);
    ...
}



Автор: Plamenk 25.10.2005, 12:02
Код

(*mapMy)[i]=myClass()

Автор: pablo 25.10.2005, 12:10
Мда, на мой всгляд более просо будет с использованием пары: std::make_pair.

Код

mapMy->insert(std::make_pair<int, MyClass>(key, value))


Вот и все чудеса.

Автор: Chaos A.D. 25.10.2005, 14:00
Код

function func(map mapMy)    
{    
    ...    
    mapMy[i] = myClass(ля-ля-ля);    
    ...    
}


Во всех приведенных выше кусках кода у вас ошибка. Это, конечно же, просто недосмотр, или пренебрежение, но если чувак по имени Гость05 не мог скомпилить свой код, то это может помочь. Гость05, вместо map в качестве параметра, юзай map<int, MyClass>&. А лучше указатель. Вот так :

Код

ReturnType func( map<int, MyClass> *MyMap )
{
    /* В этом случае нужно юзать map как показал Plamenk */
};

Автор: comcon1 25.10.2005, 14:31
Да. Это раз!
map - такого типа нет.
сделай typedef , конкретизируй шаблон и передавай уже КОНКРЕТНЫЙ тип.

А вообще, если не хотите связываться с указателями (а этого не надо делать без необходимости), то передавайте везде ссылку. То есть так
Код

typedef map<int, MyClass> TMyMap;

void func(TMyMap &lnk) {
   lnk.insert( /*ля-ля-ля*/);
}

Автор: _hunter 25.10.2005, 14:57
почему это нет? есть он. #include <map> и поехали...
тут просто терминология перепуталась -- указатель и ссылка...

Автор: comcon1 25.10.2005, 15:23
Нет, я имел ввиду, что map - это не тип, а шаблон типа.
А шаблоны нельзя указывать в качестве типов, потому что в них типы подставляются при компиляции.

Автор: Neitron 26.10.2005, 15:06
Сейчас искать некогда. Вопрос, как через итератор получить доступ ко второму элементу мэпа?

Автор: pablo 26.10.2005, 15:10
Итератор похож на указатель, так что если обратится "итератор->second", то получиш доступ ко 2 му елементу map-а

Автор: Neitron 26.10.2005, 15:17
second. класс. спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)