Программирование > Программистский форум

Сортировка списка указателей.

(1/6) > >>

Film:
В свободное от жульничества время (по вечерам), балуюсь программированием, пытаюсь восстановить былые знания. Возникала проблема, как отсортировать список list указателей на целочисленное. Гугель ничего путного не ответил. Проблема именно с указателями, простые переменные сортируются без проблем. Если быть уж совсем точным, то проблема с функцией int comp_ints( const void* a, const void* b ), точнее как туда передать указатели? Может еще остались у нас в городе программисты на С++, которые знают, как решить эту проблему?

Код такой:


--- Код: ---#include <iostream>
#include <algorithm>
#include <list>

using namespace std;

int comp_ints( const void* a, const void* b )
{
     int *arg1 = (int*) a;
     int *arg2 = (int*) b;
     if( *arg1 < *arg2 ) return -1;
     else if( *arg1 == *arg2 ) return 0;
     else return 1;
}
 
int main()
{
    list<int*> v1;
   
    int a = 0;
    int b = 1;
    int c = 9;
    int d = 1;
    int e = 3;
    int f = 4;
    int g = 3;
    int h = 2;
    int i = 5;
   
    int *j = &a;
    int *k = &b;
    int *l = &c;
    int *m = &d;
    int *n = &e;
    int *o = &f;
    int *p = &g;
    int *q = &h;
    int *r = &i;
   
    v1.push_back(j);
    v1.push_back(k);
    v1.push_back(l);
    v1.push_back(m);
    v1.push_back(n);
    v1.push_back(o);
    v1.push_back(p);
    v1.push_back(q);
    v1.push_back(r);
   
    cout << "У нас есть список v1 из " << v1.size() << " элементов \n";
       
    list<int*>::iterator i1;
    for(i1 = v1.begin(); i1 != v1.end(); ++i1)
    {
//++i;  //<< v1.at(i)
cout << "Элемент "  << " = " << **i1 << "\n";
}
   
    cout << "Сортируем наш список \n";
   
    //sort(v1.begin(), v1.end()); //Если вектор
    v1.sort(comp_ints); // Если лист
   
    cout << "Список после сортировки \n";
   
    for(i1 = v1.begin(); i1 != v1.end(); ++i1)
    {
cout << "Элемент "  << " = " << **i1 << "\n";
    }
   
    return 0;
}


--- Конец кода ---

android:
Функция вроде результат сравнения должна возращать true/false, нет?  ???


--- Код: ---bool comp_ints( const int* a, const int* b )
{
return ( *a < *b ) ;
}

--- Конец кода ---

 :D

Film:

--- Цитата: android от 13 Июля 2014, 15:21:22 ---Функция вроде результат сравнения должна возращать true/false, нет?  ???


--- Код: ---bool comp_ints( const int* a, const int* b )
{
if( *a < *b ) return true;
return false;
}

--- Конец кода ---

--- Конец цитаты ---

Да, функция должна возвращать или true или false, но проблема в том, что в эту функцию нужно передать указатель на указатель.

DoReMi:
Благодарю тебя, Господи, что я не сишник.

android:

--- Цитата: Film от 13 Июля 2014, 15:33:25 ---Да, функция должна возвращать или true или false, но проблема в том, что в эту функцию нужно передать указатель на указатель.

--- Конец цитаты ---

Так к ней указатели и приходят. Твой пример то нормально работает. Чего ещё нужно то?  ???

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии