0

数据如下的文本文件:

0 320.77
1 100.44
2 117.66
3 541.55

数据相对于第一列进行排序,但我想根据第二列并按降序对其进行排序。

输出应如下所示:

3 541.55
0 320.77
2 117.66
1 100.44
4

2 回答 2

0

我有一个类似于按第二种数据类型对文件进行排序的问题,我会给出代码,但这似乎是一个家庭作业问题,所以这里是我如何解决它的解释:

  • 将行读入字符串
  • 通过跳到下一个空格迭代到第二个数字
  • 从字符串中获取第二个数字并将其放在单独的字符串中,然后 atoi() 字符串以获取整数
  • 使用排序函数中的整数对字符串进行排序,然后调用std::sort函数qsort()
于 2012-12-12T15:56:22.080 回答
0

我认为如果我自娱自乐并提供答案,这不会损害@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;
}

GodBolt上

于 2021-03-23T12:46:39.730 回答