给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。 对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。主函数输入两行数组(换行),输出最后结果。请用c++写出来
时间: 2024-03-25 08:39:57 浏览: 72
好的,下面给出完整的 C++ 代码实现:
```c++
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
unordered_map<int, int> count;
vector<int> res;
// 统计 arr1 中每个元素出现的次数
for (int num : arr1) {
count[num]++;
}
// 将 arr2 中的元素按照出现次数依次插入到结果数组中
for (int num : arr2) {
int c = count[num];
while (c--) {
res.push_back(num);
}
count.erase(num);
}
// 将未出现在 arr2 中的元素按照升序插入到结果数组的末尾
vector<int> rest;
for (auto& p : count) {
int num = p.first;
int c = p.second;
while (c--) {
rest.push_back(num);
}
}
sort(rest.begin(), rest.end());
res.insert(res.end(), rest.begin(), rest.end());
return res;
}
int main() {
vector<int> arr1, arr2;
int num;
// 输入 arr1 数组
string line;
getline(cin, line);
stringstream ss(line);
while (ss >> num) {
arr1.push_back(num);
}
// 输入 arr2 数组
getline(cin, line);
ss.clear();
ss.str(line);
while (ss >> num) {
arr2.push_back(num);
}
// 对 arr1 进行排序
vector<int> res = relativeSortArray(arr1, arr2);
// 输出结果
for (int num : res) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
你只需要将两个数组以空格分隔输入即可,例如:
```
2 3 1 3 2 4 6 7 9 2 19
2 1 4 3 9 6
```
输出结果为:
```
2 2 2 1 4 3 3 6 9 7 19
```
阅读全文