c ++相对于第二列的降序

时间:2012-12-12 15:36:24

标签: c++ sorting

文本文件,其中数据如下:

0 320.77
1 100.44
2 117.66
3 541.55

数据是按照第一列排序的,但我想按照第二列和降序对其进行排序。

输出应如下:

3 541.55
0 320.77
2 117.66
1 100.44

2 个答案:

答案 0 :(得分:0)

我有一个类似的问题,用第二种数据类型排序文件,我会给代码,但这似乎是一个功课问题,所以这里解释我是如何解决它的:

  • 将该行读入字符串
  • 跳过下一个空格
  • 迭代到第二个数字
  • 从字符串中获取第二个数字并将其放在单独的字符串中,然后在atoi()中获取整数
  • 使用排序函数中的整数对字符串进行排序,然后调用std::sort qsort()中的函数

答案 1 :(得分: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