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

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

Войти
Регистрация
Восстановить пароль
 
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
#1

Функция сортировки при создания multimap'a - C++

19.04.2014, 19:27. Просмотров 255. Ответов 9
Метки нет (Все метки)

Вот кусочек кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <map>
#include <functional>
using namespace std;
 
bool compare (const pair<string, double>& a, const pair<string, double>& b)
{
    if (a.first<b.first)
        return true;
    if (a.first == b.first && a.first > b.first)
        return true;
    return false;
}
 
typedef multimap< pair<string, double>, int, compare> mMAP;
 
int main()
{
        return 0;
}
Выдает ошибку
C++
1
error C2923: std::multimap: "compare" не является допустимым аргументом типа шаблон для параметра "_Pr"
Пробовал использовать функторы. Тоже не работает. Помогите, пожалуйста.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 19:27     Функция сортировки при создания multimap'a
Посмотрите здесь:

Написать функции создания массива, сортировки и вывода. Ошибка Incompatible type conversion - C++
Доброе утро) Подскажите пожалуйста в чем ошибка. Задача: Создать массив n*m (ввод пользователем). Написать функции создания массива,...

Функция сортировки - C++
А ваше есть ли функция для сортировки массива, если да то как ей пользоваться ?

Функция сортировки - C++
День добрый, пишу сортировку чисел, столкнулся с проблемой, комментирую в коде: #include &lt;iostream&gt; using namespace std; ...

Функция сортировки - C++
Здравствуйте,коллеги! Подскажите какую-нибудь функцию сортировки с наименьшим количеством операций сравнения. В общем необходимо сравнить...

Функция сортировки массива - C++
Задание - необходимо осуществить сортировку, используя функцию. Я написал код, но он не работает. Прошу помочь его исправить. ...

Не работает функция сортировки - C++
void Sort(char path) { Rect *MyRect = new Rect ; //дин массив Rect temp; //буффер int k = 0,x1,y1,x2,y2; //вершины...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
19.04.2014, 19:33     Функция сортировки при создания multimap'a #2
Подводит, как обычно,
C++
1
using namespace std;
Там уже есть шаблон compare. Предлагаю использовать using для задействованных имён:
C++
1
using std::multimap;
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
19.04.2014, 19:39  [ТС]     Функция сортировки при создания multimap'a #3
Nick Alte, я поменял compare на My_comapre. Ошибка не пропала. Можно ли решить вопрос без изменения
C++
1
using namespace std;
?
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
19.04.2014, 19:45     Функция сортировки при создания multimap'a #4
В качестве третьего параметра шаблона ожидается тип. Надо обернуть функцию в функтор:
C++
1
2
3
4
5
6
struct myCompare{
    bool operator () (const pair<string, double>& a, const pair<string, double>& b) const 
        {
            //...
        }
};
или использовать лямбда-выражение (Visual Studio умеет это с 2010 версии).
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
19.04.2014, 19:55  [ТС]     Функция сортировки при создания multimap'a #5
Nick Alte, я писал, что функтор тоже пробовал.
Вот функтор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class My_compare
{
public:
    bool operator () (const pair<string, double>& a, const pair<string, int>& b) const
    {
        if (a.first<b.first)
            return true;
        if (a.first == b.first && a.first > b.first)
            return true;
        return false;
    }
};
В это случае пишет открывает xtree и в коде
C++
1
2
3
4
    key_compare key_comp() const
        {   // return object for comparing keys
        return (this->comp);
        }
пишет
C++
1
error C2091: функция возвращает функцию
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
19.04.2014, 20:00     Функция сортировки при создания multimap'a #6
А как объявляется multimap с использованием функтора? А то что-то странно очень, что тип comp вдруг оказывается функцией, а не структурой, как указано.
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
19.04.2014, 20:02  [ТС]     Функция сортировки при создания multimap'a #7
Nick Alte,
C++
1
typedef multimap< pair<string, double>, int, My_compare()> mMAP;
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
19.04.2014, 20:06     Функция сортировки при создания multimap'a #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Надо без круглых скобок:
C++
1
typedef multimap< pair<string, double>, int, My_compare> mMAP;
HenryDukart
122 / 122 / 35
Регистрация: 05.10.2013
Сообщений: 455
Завершенные тесты: 2
19.04.2014, 20:07  [ТС]     Функция сортировки при создания multimap'a #9
Nick Alte, большое спасибо за решение проблемы. Теперь компилируется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2014, 20:09     Функция сортировки при создания multimap'a
Еще ссылки по теме:

Функция сортировки массива - C++
Дан массив целых чисел. Напишите функцию, которая получает данный массив в качестве аргумента и сортирует его по возрастанию, а также...

Функция сортировки и поиска - C++
Ужасная функция...неделю бился так ничего и не смог придумать...Само условие поставленное в задаче звучит так: &quot;Написать алгоритм,...

Функция сортировки матрицы - C++
Функция сортировки матрицы по убыванию элементов 1 строки

Функция сортировки массива - C++
Необходимо написать функцию сортировки массива структур с информацией по книгам по возрастанию года издания и возвращающую отсортированный...


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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,931
Завершенные тесты: 1
19.04.2014, 20:09     Функция сортировки при создания multimap'a #10
В случае с круглыми скобками компилятор считал, что ему предъявляют тип функции без аргументов, возвращающей объект My_compare.
Yandex
Объявления
19.04.2014, 20:09     Функция сортировки при создания multimap'a
Ответ Создать тему
Опции темы

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