膜拜大佬得新思路,实在是太妙了

#include <bits/stdc++.h>
using namespace std;


int main() {
    int n = 0;
    cin >> n;
    int key, value;
    map<int, int, less<int>> pary;
    for(int i = 0; i < n; i++) {
        cin >> key >> value;
        if(pary.count(key) == 0) {
            pary.insert(make_pair(key,value));
        }
        else {
            pary[key] += value;
        }
    }
    for(auto it = pary.begin(); it != pary.end(); it++) {
        cout << it->first << " " << it->second << endl;
    }

    return 0;
}

思路

1.创建结构体来记录index和value

2.设计cmp来实现排序顺序

3.实现函数mergeTable

step1 将输入的dt数组不同的元素提取出来存放到temp数组中

step2 对temp排序操作

step2 将temp的值赋给dp数组

总的来说,这道题目是不难的,加油吧!继续刷题!

#include <bits/stdc++.h>
using namespace std;
//创建结构体
struct datatable {
    int index;
    int value;
};

//按照index大小排序
bool cmp(datatable a, datatable b) {
    return a.index < b.index;
}

int findIndex(vector<datatable> temp, int a) {
    int flag = -1;
    for(int i = 0; i < temp.size(); i++) {
        if(temp[i].index == a) {
            flag = i;
            break;
        }
    }
    return flag;
}

//
void mergeTable(vector<datatable> &dt) {
    vector<datatable> tempdt;
    int tempindex = 0,a = 0;
    for(int i = 0; i < dt.size(); i++) {
        //dt[i]不在temp中,就把dt[i]加入到temp中
        if(findIndex(tempdt,dt[i].index) == -1) {
            datatable temp;
            temp.index = dt[i].index;
            temp.value = dt[i].value;
            tempdt.push_back(temp);
        }
        //dt[i]在temp中,就找到第一个下标相等的位置
        else {
            a = findIndex(tempdt, dt[i].index);
            tempdt[a].value += dt[i].value;
        }
    }
    sort(tempdt.begin(), tempdt.end(), cmp);
    dt = tempdt;
}


int main()
{
    int n;
    int a,b;
    cin>>n;
    //初始化与赋值
    vector<datatable> dt(n);
    for(int i = 0; i < n; i++) {
        cin>>a>>b;
        dt[i].index = a;
        dt[i].value = b;
    }
    mergeTable(dt);
    for(int i = 0; i < dt.size(); i++) {
        cout << dt[i].index << " " << dt[i].value << endl;
    }
    return 0;
}