在2D矢量内对矢量进行排序

时间:2011-06-04 15:00:24

标签: arrays sorting vector multidimensional-array swap

我在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);
     }
 }

我需要以下内容:        if(row1.capacity&gt; row2.capacity)             交换或类似的东西。

提前致谢:)

2 个答案:

答案 0 :(得分:1)

您可以将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(),您还应该考虑。

答案 1 :(得分:0)

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(),只需在比较函数中更改它。