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

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

Войти
Регистрация
Восстановить пароль
 
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
#1

Map и указатель на ф-цию - C++

26.10.2011, 00:02. Просмотров 703. Ответов 2
Метки нет (Все метки)

Вечер добрый,
перешел на вижуал студио с МС компилером, после мингы, не могу понять почему данный код
на мингве успешно выполняется, а на МС компилере нет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool comp (const std::string &left_str, 
    const std::string &right_str)
{
    return (left_str > right_str) ? true
        : false;
}
 
 
std::map < std::string, int, bool (*) (const std::string &left_str, const std::string &right_str) > 
                    new_map(&comp);
 
new_map.insert(std::make_pair("a", 1));
new_map.insert(std::make_pair("d", 4));
new_map.insert(std::make_pair("c", 3));
new_map.insert(std::make_pair("b", 2));
 
std::map<std::string, int>::const_iterator
    map_iter = new_map.begin();
 
for ( ; map_iter != new_map.end(); ++map_iter)
    std::cout << map_iter->first << std::endl;
выкидает:
Error 1 error C2440: 'initializing' : cannot convert from 'std::_Tree_iterator<_Mytree>' to 'std::_Tree_const_iterator<_Mytree>' c:\users\burzum\documents\visual studio 2010\projects\hello\hello\hello.cpp 19 1 hello

и

Error 2 error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::_Tree_const_iterator<_Mytree>' (or there is no acceptable conversion) c:\users\burzum\documents\visual studio 2010\projects\hello\hello\hello.cpp 21 1 hello
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2011, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Map и указатель на ф-цию (C++):

Указатель на ф-цию в структуре - C++
Привет всем, почему если объявить структуру в виде указателя и присвоить указателю на ф-цию функцию, то будет ошибка, а если объявить...

Указатель на ф-цию член класса - C++
Чёрная магия или я бот? g++ sub.cpp:21: error: expected unqualified-id before ‘*’ token sub.cpp:21: error: must use ‘.*’ or...

Спрятать указатель на функцию класса в map и вызвать из другого объекта - C++
Товарищи, пишу примитивный &quot;tcp-сервер&quot;. В его задачи входит принятие соединений и получение сообщений. В зависимости от сообщения &quot;сервер&quot;...

Куда будет указывать указатель в std::map<string,pointer *>? - C++
Чисто теоретически,хотелось бы узнать у знатоков C++ Допустим есть некий контейнер std::map&lt;const string, someClass *&gt; container И...

Есть ли аналог Map <String,String> чтобы передавать его как указатель на данные? - C++
Добрый день, подскажите, есть ли аналог Map &lt;String,String&gt; чтобы передавать его как указатель на данные? Заранее спасибо!

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.10.2011, 00:55 #2
Компиляция идет с правилами C++0x? Может cbegin()/cend() ?

А вообще. Контейнер не константый, а итератор пытаетесь взять константный. Не гуд.
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
26.10.2011, 01:22  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Компиляция идет с правилами C++0x? Может cbegin()/cend() ?

А вообще. Контейнер не константый, а итератор пытаетесь взять константный. Не гуд.
не катит cbegin()/cend(), брал обычный не константный итератор тоже самое, кстати, а где эти правила C++0x можно врубить или вырубить у меня студия 2010

Добавлено через 5 минут
все сделал, вот коректный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
std::map < std::string, int, bool (*) (const std::string &left_str, const std::string &right_str) > new_map(comp);
new_map.insert(std::make_pair("a", 1));
new_map.insert(std::make_pair("d", 4));
new_map.insert(std::make_pair("c", 3));
new_map.insert(std::make_pair("b", 2));
 
std::map<std::string, int, bool (*) (const std::string &left_str, const std::string &right_str)>::const_iterator
    map_iter = new_map.cbegin();
 
for ( ; map_iter != new_map.cend(); ++map_iter)
    std::cout << map_iter->first << std::endl;
вся проблема была в этой строке:
C++
1
2
std::map<std::string, int, bool (*) (const std::string &left_str, const std::string &right_str)>::const_iterator
    map_iter = new_map.cbegin();
Могу предположить что по новому стандарту итератор надо объявлять тоже с полными параметрами, будь-то указатель на ф-цию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2011, 01:22
Привет! Вот еще темы с ответами:

Обращение к элементам vector, который находится в map, находящийся в map - C++
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map &lt;int,map&lt;int,vector&lt;int&gt; &gt;...

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ? - C++
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

Как вставить map в map - C++
есть такой map map &lt; INT64 , map &lt;INT64 , map&lt; wArray , int &gt; &gt; &gt; tMenu; как его заполнить? пробовал так ...


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

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

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