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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
AnreyKazakov
Заблокирован
#1

Как передать контейнер map в функцию? - C++

28.09.2012, 19:45. Просмотров 2127. Ответов 3
Метки нет (Все метки)

Вопросов правда несколько, первый связан с конкретным примером.
Есть карта (заполненная), ключ - стринг, значение - вектор-стринг, необх доб значения в вектор, в функцию передается два итератора begin(),end();
Когда пытаюсь инициализировать вектор значением итератора вылазит ошибка, строчку выделил комментарием /**/.
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
using namespace std;
typedef map<string,vector<string> > mapsv;
void add(mapsv::iterator ibegin,mapsv::iterator iend){
    
    //enter value
    string sname,ssurname;
    cout<<"Enter Surname and Name: ";
    cin>>sname>>ssurname;
    
    //create new map and search surname
    mapsv mps(ibegin,iend);cout<<"ok1";
    mapsv::iterator ifind=mps.find(ssurname);cout<<"ok2";
    
    //if the surname is found - create new vector
    //and search for the name to add new value
    bool key=0;cout<<"ok3";
    if(ifind!=iend){
        vector<string> vec(ifind->second);cout<<"ok4";/*ошибка*/
        for(vector<string>::iterator i=vec.begin();i!=vec.end();++i){
            cout<<"ok5";
            if(sname==*i){key=1;cout<<"ok6";break;}
            }
            
        if(key){cout<<"This name is already!";}else{
            vec.push_back(sname);cout<<"Add name "<<sname<<" in the group surname "<<ssurname<<endl;}
        }else{cout<<"This surname is already!";}
    }
Во вторых, в книжке написано (правда в разделе последовательных контейнеров было), что в функцию лучше передавать не сам объект (контейнер), а его итераторы... как вариант первый и последний.
Но, у меня чет так не получается =( отправил вроде итераторы, а чтобы добавить вектор, нужно найти функцией find ключ, как же я его найду, если у меня только два ключа в распоряжении? вот и создаю новый контейнер в функции, а это мне кажется то же самое, что его передать в функцию... Смысл теряется, только код раздувается... хех, в рифму получилось...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2012, 19:45     Как передать контейнер map в функцию?
Посмотрите здесь:

контейнер map C++
C++ Контейнер map ?
C++ Контейнер map, с двумя ключами?
C++ Контейнер map
C++ Чтение из файла в контейнер map
C++ Контейнер map
Контейнер Map. Использование класса как ключ C++
Перевернуть контейнер map? C++
Map контейнер сортировка C++
C++ Контейнер map<int, some*>
C++ Контейнер map
C++ Контейнер map

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1636 / 1264 / 129
Регистрация: 21.12.2010
Сообщений: 1,925
Записей в блоге: 7
28.09.2012, 19:58     Как передать контейнер map в функцию? #2
ifind и iend указывают на разные контейнеры
AnreyKazakov
Заблокирован
28.09.2012, 23:13  [ТС]     Как передать контейнер map в функцию? #3
Спасибо, в этом и была ошибка, остался второй, более существенный вопрос:

Как лучше передовать данные контенера?

Вот допустим мне надо править этот map, а в нем еще и вектор, а векторе может еще кучу вложений всяких быть. Если передовать по ссылке только итераторы потом становиться очень неудобно работать, просто жуть... (хотя по учебнику предпочтительней передать итераторы), у меня код в разы раздулся, и я запарился, тот что сверху кстате неправильно я сделал =) , вот.
а если по ссылке передать весь контейнер, то все решается гораааздо быстрее. Да и потерь никаких, получается, что функция обращается к тому же объекту (она ничего не создает, поэтому потери производительности нет).

ИХМО лучше весь объект кидать, даже если не по ссылке.

Добавлено через 2 часа 18 минут
Ну, ответите, пож, сильные мира сего. Как вы передаете в функцию контейнер? Полностью или только итераторы? Или как-то еще? Или все от конкретной задачи зависит?
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
28.09.2012, 23:19     Как передать контейнер map в функцию? #4
От задачи зависит.
Передавайте, как удобнее. Что по ссылке, что итератором - на скорости не скажется
можно еще и итератор в тайпдеф добавить:
typedef map<string,vector<string> >::iterator mapsv_it;
Yandex
Объявления
28.09.2012, 23:19     Как передать контейнер map в функцию?
Ответ Создать тему
Опции темы

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