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

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

Восстановить пароль Регистрация
 
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 2
19.04.2014, 19:27     Функция сортировки при создания multimap'a #1
Вот кусочек кода:
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
Посмотрите здесь:

C++ Функция сортировки матрицы
Функция сортировки C++
C++ Функция сортировки
C++ Функция сортировки
C++ не работает функция сортировки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.04.2014, 19:33     Функция сортировки при создания multimap'a #2
Подводит, как обычно,
C++
1
using namespace std;
Там уже есть шаблон compare. Предлагаю использовать using для задействованных имён:
C++
1
using std::multimap;
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 2
19.04.2014, 19:39  [ТС]     Функция сортировки при создания multimap'a #3
Nick Alte, я поменял compare на My_comapre. Ошибка не пропала. Можно ли решить вопрос без изменения
C++
1
using namespace std;
?
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 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
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 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
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.04.2014, 20:00     Функция сортировки при создания multimap'a #6
А как объявляется multimap с использованием функтора? А то что-то странно очень, что тип comp вдруг оказывается функцией, а не структурой, как указано.
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 2
19.04.2014, 20:02  [ТС]     Функция сортировки при создания multimap'a #7
Nick Alte,
C++
1
typedef multimap< pair<string, double>, int, My_compare()> mMAP;
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.04.2014, 20:06     Функция сортировки при создания multimap'a #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Надо без круглых скобок:
C++
1
typedef multimap< pair<string, double>, int, My_compare> mMAP;
HenryDukart
 Аватар для HenryDukart
100 / 100 / 28
Регистрация: 05.10.2013
Сообщений: 400
Завершенные тесты: 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
Еще ссылки по теме:

Написать функции создания массива, сортировки и вывода. Ошибка Incompatible type conversion C++
Multimap. Ошибка operator+ not implemented in type multimap C++
C++ Функция сортировки массива

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

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

Текущее время: 14:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru