我在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) 交换或类似的东西。
提前致谢:)
答案 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()
,只需在比较函数中更改它。