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

Шаблон функции сравнения для qsort() - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не работает признак окончания ввода(признак-0) http://www.cyberforum.ru/cpp-beginners/thread854873.html
Признак окончания ввода 0; подскажите люди добрые что не так?) #include <iostream> #include<stdio.h> using namespace std; int main(){ setlocale(LC_ALL, "Russian"); int const n=1000; int arr; int i=0,count=0,countr=0; cout<<"Введите последовательность чисел: ";
C++ Добавить числа из файла Суть задания : создать файл, записать туда 10 рандомных чисел, закрыть файл, открыть файл, взять оттуда числа и посчитать их сумму. Проблема собсно в том, что считаю я аски кода этих чисел, а не сами числа. Прилагаю код, он немного криво написано, но уж извиняйте : #include <vcl.h> #include <iostream.h> #include <conio.h> #include <iomanip.h> #include <fstream> using namespace std; int... http://www.cyberforum.ru/cpp-beginners/thread854865.html
CAsyncSocket C++
Доброго времени суток. При написании программы возникла проблема с CAsyncSocket. Нужно было реализовать передачу сообщений между диалоговым приложением и консолью (консоль - сервер), через динамически загружаемую библиотеку. Вот код библиотеки: struct Header { int size; int addr; }; struct Message { char *mes;
C++ Задача по численным методам
помогите решить задачу
C++ Передача операнда внутри переопределенной операции http://www.cyberforum.ru/cpp-beginners/thread854825.html
Здравствуйте. Пытаюсь разобраться с перегрузкой операций для классов, и вот в чем проблема: Есть класс longNumber, в котором хранится(внезапно) длинное число в виде массива цифр а также знак числа. Переопределил для класса операцию "+". Теперь учу её работать с отрицательными числами. Например если первое число положительное, а второе - отрицательное, то значения нужно уже вычитать. Собственно,...
C++ Биномиальный коэффициент Реализовать рекурсивную функцию, вычисляющую биномиальный коэффициент по формуле: подробнее

Показать сообщение отдельно
Я-Лис
 Аватар для Я-Лис
29 / 64 / 13
Регистрация: 10.05.2011
Сообщений: 173
03.05.2013, 14:37     Шаблон функции сравнения для qsort()
Хочу отсортировать массив из int и из double с помощью qsort().
Для этого необходимо определить функцию сравнения элементов.
Думал попробовать сделать шаблон такой функции.
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T>
int comp(const T *a,const T *b)
{
//  return *(double *)a - *(double *)b;
    if (*(T *)a < *(T *)b)
        return -1;
    else if (*(T *)a > *(T *)b)
        return 1;
    else
        return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(int argc, char* argv[])
{
    double num[] = {10.5, 4.3, 3.9, 6.7, 5.8, 7.1, 8.0};
    int i;
 
    qsort(num,7,sizeof(double),comp);
 
    for(i=0;i<7;i++)
        cout<<num[i]<<' ';
 
    getch();
    return 0;
}
После компиляции ругается [BCC32 Error] E2109 Not an allowed type везде где есть *(T *)a(или b).
Можно ли вообще так сделать, с помощью шаблонов? Не охота для каждого числового типа определять свою функцию.
Кстати почему если для массива из double определить такую функцию сравнения:
C++
1
2
3
4
int comp(const void *a,const void *b)
{
    return *(double *)a - *(double *)b;
}
То массив отсортирован след-им образом: 4.3, 3.9, 5.8, 6.7, 7.1 ,8.0, 10.5. Первые два не в том порядке.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru