我有一份STL的矢量列表。它们有不同的长度,我想按每个向量的第一个元素对它们进行排序。例如,我有矢量:4 4 5 6 10,1 8 ,2 2 3和3 1 7 9.第一个数字是每个向量的大小,后面是向量的元素。我想在文件中显示向量,按第一个元素排序。在此示例中,我的矢量应按以下顺序显示:3 1 7 9,2 2 3,4 4 5 6 10和1 8
这是我的代码:
ofstream fout ("retele.out");
fout << T << '\n';
for (i=1; i<=T; i++)
{
fout << sol[i].size() << ' ';
sort(sol[i].begin(),sol[i].end());
for (j=0; j<sol[i].size(); j++)
fout << sol[i][j] << ' ';
fout << '\n';
}
fout.close();
“T”是向量的数量。 “sort”函数用于对每个向量进行排序,我还需要另一种排序向量进行排序。
答案 0 :(得分:6)
对其他答案的一个小澄清:std::vector<T>
已经operator<
与您描述的行为完全相同(cplusplus description)。
template < class T, class Alloc > bool operator < (const vector<T, Alloc>& lhs, const vector<T, Alloc>& rhs);
说明
小于比较(运算符&lt;)表现得好像使用算法lexicographical_compare,其使用运算符&lt;顺序地比较元素。以互惠的方式(即检查&lt; b和b&lt; a)并在第一次出现时停止。
所以,你可以写
sort(sol.begin(), sol.end());
UP :您在评论中写道,您的数组为std::vector
,而不是std::list<std::vector>
。该数组没有方法begin()
和end()
,因此这个确切的代码不起作用。解决方案是
sort(sol, sol + SIZE);
其中SIZE
是要排序的数组部分的大小。
答案 1 :(得分:0)
根据此link答案:
您可以像这样创建比较方法:
bool compare_vec (const std::vector<int>& first, const std::vector<int>& second)
{
return first[1]<second[1];
}
并致电:
sol.sort(compare_vec);
答案 2 :(得分:0)
查看this帖子。
bool myfunction (vector<int> i,vector<int> j) { return (i[0]<j[0]);}
struct myclass {
bool operator() (vector<int> i,vector<int> j) { return (i[0]<j[0]);}
} myobject;
...
ofstream fout ("retele.out");
fout << T << '\n';
for (i=1; i<=T; i++)
{
fout << sol[i].size() << ' ';
sort(sol[i].begin(),sol[i].end(), myfunction);
for (j=0; j<sol[i].size(); j++)
fout << sol[i][j] << ' ';
fout << '\n';
}
fout.close();
您必须实施自己的比较器,稍后将对其vectors
列表进行排序。
答案 3 :(得分:0)
您可以遵循此算法:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="5dip"
style="@style/CustomScrollBar">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="left"
android:textSize="16sp"
android:padding="5dp"
style="@style/CustomTextView"/>
</ScrollView>
答案 4 :(得分:0)
STL函数std::sort
包含可选谓词。
在这种情况下,我想你想写的类似:
std::sort(sol.begin(), sol.end(), [](const std::vector<int> &lhs, const std::vector<int> &rhs) { return lhs.front() < rhs.front(); });
请注意,如果列表包含空向量,此代码将崩溃。
如果问题是std::list
,尽管评论中指出了c风格的数组std::vector<int> v[50001]
。人们应该将其重写为:
std::sort(sol[0], sol[nofElementsFilledIn], [](const std::vector<int> &lhs, const std::vector<int> &rhs) { return lhs.front() < rhs.front(); });
答案 5 :(得分:0)
std::sort(MyVector.begin(), MyVector.end(), [](auto a, auto b) { return a.front() < b.front(); } );
我希望这可以对你的载体进行排序