数据如下的文本文件:
0 320.77
1 100.44
2 117.66
3 541.55
数据相对于第一列进行排序,但我想根据第二列并按降序对其进行排序。
输出应如下所示:
3 541.55
0 320.77
2 117.66
1 100.44
我有一个类似于按第二种数据类型对文件进行排序的问题,我会给出代码,但这似乎是一个家庭作业问题,所以这里是我如何解决它的解释:
std::sort
函数qsort()
我认为如果我自娱自乐并提供答案,这不会损害@laky 现在的大学表现。
#include <utility>
#include <sstream>
#include <vector>
#include <iostream>
#include <algorithm>
using Entry = std::pair<int, float>;
using Storage = std::vector<Entry>;
void dump(const Storage& storage)
{
for(auto& [i, v] : storage)
std::cout << i << " " << v << "\n";
}
int main(void)
{
std::stringstream input;
input.str("0 320.77\n1 100.44\n2 117.66\n3 541.55\n");
Storage storage;
for ( /* read 'file' into vector storage for processing */
Entry entry;
input >> entry.first >> entry.second && input.good();
)
{
storage.push_back(std::move(entry));
}
std::cout << "Original data:\n";
dump(storage);
std::sort(storage.begin(), storage.end(),
[](Entry l, Entry r) /* sorting predicate */
{
return l.second > r.second;
});
std::cout << "Sorted data:\n";
dump(storage);
return 0;
}