Как использовать существующую целочисленную сортировку для сортировки целочисленных кортежей? - PullRequest
0 голосов
/ 25 августа 2011

Кто-нибудь знает эффективный алгоритм использования существующей целочисленной сортировки (такой как сортировка STL) для сортировки целочисленных кортежей без изменения существующей целочисленной сортировки.Например, я хочу отсортировать список из 4 целочисленных кортежей.Кортежи в форме: <int,int,int, int>.Снова предположим, что целочисленная сортировка может иметь дело только с одиночными целыми числами.

Ответы [ 2 ]

6 голосов
/ 25 августа 2011

Вы можете отсортировать все что угодно, используя существующую подпрограмму сортировки C ++ «sort», просто определив свою собственную функцию сравнения, например, в вашем случае

sort(mytuplearray, mytuplearray + N, mycomp)

, где mycomp

bool mycomp(tuple& a, tuple& b)
{
     //compare however you like
}
2 голосов
/ 25 августа 2011

Если вы хотите создать лексикографический компаратор кортежей с помощью скалярного компаратора, просто сравните последнюю пару компонентов, которые не равны. Примерно так:

template<typename T>
class LexicographicCompare
{
private:

    T Compare;

public:

    LexicographicCompare(T Compare) : Compare(Compare)
    {
    }

    bool operator()
        ( const tuple<int, int, int> & a
        , const tuple<int, int, int> & b
        ) const
    {
        if (a[0] != b[0])
            return Compare(a[0], b[0]);
        if (a[1] != b[1])
            return Compare(a[1], b[1]);
        return Compare(a[2], b[2]);
    }
};

sort(tuples.begin(), tuples.end(), LexicographicCompare(IntCompare()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...