C++编程求解,离散化排序,关键字排序

C++离散化排序问题,无法AC,求指教!
【题目描述】
输入n,再输入n行,每行2个关键字,按照第一关键字排序,保证所有的第一关键字都不一样
n <= 1000
每个数字在int范围内
【输入样例】
5
1 10
200 1
123 10
4 10
3 23
【输出样例】
1 10
3 23
4 10
123 10
200 1

#include <iostream>  
#include <vector>  
#include <algorithm>  
using namespace std;

int main() {  
    int n;  
    cin >> n;  
    vector<pair<int, int>> items;  
    for (int i = 0; i < n; i++) {  
        int k1, k2;  
        cin >> k1 >> k2;  
        items.push_back({k1, k2});  
    }  
    sort(items.begin(), items.end(), greater<pair<int, int>>());  
    vector<pair<int, int>> sortedItems;  
    for (auto item : items) {  
        sortedItems.push_back(item);  
    }  
    reverse(sortedItems.begin(), sortedItems.end());  
    for (auto item : sortedItems) {  
        cout << item.first << " " << item.second << endl;  
    }  
    return 0;  
}


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7488576
  • 以下回答由chatgpt基于相关博客总结生成:

    对于C++离散化排序问题,我可以提供以下解决方案:

    1. 题目样例

    输入:

    3

    4 1

    3 2

    1 3

    输出:

    1 3

    3 2

    4 1

    1. 解决思路

    离散化排序问题可以使用桶排序的思路来解决。具体步骤如下:

    (1) 输入n个数据,每个数据包含两个关键字。

    (2) 取出每个数据的第一关键字,把所有第一关键字从小到大进行排序,排序后的下标即为该数据的离散化后的下标。

    (3) 根据离散化后的下标把数据存入桶中,同一离散化下标的数据存入同一个桶中。

    (4) 按照桶的顺序把数据拿出来,输出即可。

    1. 程序实现

    以下是C++离散化排序问题的完整代码实现:

    include

    include

    include

    using namespace std;

    struct Data { int key1, key2, index; bool operator<(const Data &a) const { return key1 < a.key1; } };

    bool compareByKey2(const Data &a, const Data &b) { return a.key2 < b.key2; }

    int main(){ int n; cin >> n; vector data(n); for (int i = 0; i < n; i++){ cin >> data[i].key1 >> data[i].key2; data[i].index = i; } sort(data.begin(), data.end()); vector> bucket(n); for (int i = 0; i < n; i++){ bucket[data[i].key1].push_back(data[i]); } for (int i = 0; i < n; i++){ sort(bucket[i].begin(), bucket[i].end(), compareByKey2); } for (int i = 0; i < n; i++){ for (int j = 0; j < bucket[i].size(); j++){ cout << bucket[i][j].key1 << " " << bucket[i][j].key2 << endl; } } return 0; }

    1. 需要注意的地方

    (1) 对于数据的排序,需要重载运算符<,根据第一关键字来实现排序。

    (2) 对于桶中数据的排序,需要重新定义比较函数,根据第二关键字来实现排序。

    (3) 桶的下标即为离散化后的下标,需要注意每个桶可能存放多个数据。

    (4) 结构体中需要记录数据的原始下标,可以在输出时根据原始下标输出。

    1. 参考资料

    (1) C++离散化排序问题的详细解释:https://cloud.tencent.com/developer/article/1634797

    (2) C++结构体的使用:https://www.runoob.com/cplusplus/cpp-structures.html

    (3) C++向量(vector)的使用:https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html