Сортировать векторы в 2D векторах - PullRequest
1 голос
/ 04 июня 2011

У меня проблема с сортировкой векторов в 2D векторе?Я хотел бы отсортировать их по их вместимости от самых больших до самых маленьких.

Пример: ROWS {{1,2,3}, {1,2}, {1,2,3,4,5}}

он должен быть отсортирован как ROWS.capacity();// ROWS {{1,2,3,4,5}, {1,2,3}, {1,2}}

Следующее является частью кода, который я делал до сих пор:

 std::vector< std::vector<int> >::iterator row;
 std::vector<int>::iterator col;



for (row=ROWS.begin(); row<ROWS.end(); row++){

Logger::logln(LOG_DEBUG, "ROW: %d",row->capacity());

     for (col = row->begin(); col != row->end(); col++){
         Logger::logln(LOG_DEBUG, " CONTENT: %d  ",*col);
     }
 }

Мне нужно следующее: если (row1.capacity> row2.capacity), то подкачка или что-то вроде этого.

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Вы можете использовать std::sort с пользовательским предикатом заказа:

struct CapacityGreater : public std::binary_function<std::vector<int>,
                                                     std::vector<int>,bool>
{
    bool operator()(const std::vector<int> &a, const std::vector<int> &b) const
        { return a.capacity() > b.capacity(); }
};

std::sort(ROWS.begin(), ROWS.end(), CapacityGreater());

Это должно хорошо работать, если std::sort использует std::swap для внутреннего использования, в противном случае копирование строк может оказаться довольно дорогим, и вам, вероятно, потребуется реализовать собственную функцию сортировки.

Вы также должны подумать, если вам действительно нужно capacity(), а не size().

0 голосов
/ 04 июня 2011

Используйте std :: sort с пользовательской функцией сравнения, например:

#include <vector>
#include <algorithm>

bool compare(const std::vector<int>& a, const std::vector<int>& b)
{
    return a.size() > b.size();
}

int main()
{
    std::vector< std::vector<int> > v;
    // populate your vector with values here
    sort(v.begin(), v.end(), compare);
    return 0;
}

Я использовал size() здесь, но если вам действительно нужно capacity(), просто измените его вфункция сравнения.

...