📜  将 Array 的两个 Map 合并为 Array 的一个排序 Map

📅  最后修改于: 2022-05-13 01:56:12.783000             🧑  作者: Mango

将 Array 的两个 Map 合并为 Array 的一个排序 Map

给定两个映射map1map2 ,其中一个字符串作为键,整数数组作为值,任务是将它们合并到一个映射中,如果一个键在两个映射中是通用的,则应该合并相应的数组。

例子

方法:该问题的解决方案是基于合并两个数组的概念。请按照以下步骤操作:

  • 创建地图以存储合并的地图
  • 遍历map1并将所有键值对存储在map1中。
  • 遍历 map2 并:
    • 如果map2的key在map1中不存在,只需在map1中插入这个键值对即可
    • 如果map2的key存在于map1中,
      • 取 map1 的数组和 map2 的数组
      • 对两个数组进行排序,然后
      • 使用合并两个数组中提到的方法合并它们。
  • 最后返回 map3。

下面是上述方法的实现。

C++
// C++ code to implement the approach
#include 
using namespace std;
 
// Function to merge arrays
vector mergeArrays(vector& a, vector& b,
                        int n, int m)
{
    vector mergedArray;
 
    // Declaring a map.
    // Using map as a inbuilt tool
    // to store elements in sorted order.
    map mp;
 
    // Inserting values to a map.
    for (int i = 0; i < n; i++)
        mp[a[i]] = true;
 
    for (int i = 0; i < m; i++)
        mp[b[i]] = true;
 
    // Printing keys of the map.
    for (auto i : mp)
        mergedArray.push_back(i.first);
    return mergedArray;
}
 
// Function to merge maps
map >
mergeMap(map >& map1,
         map >& map2)
{
    map > map3;
    map3.insert(map1.begin(), map1.end());
 
    for (auto itr : map2) {
        if (map3.find(itr.first) == map3.end())
            map3.insert({ itr.first, itr.second });
        else {
            auto temp_itr = map3.find(itr.first);
            vector arr = mergeArrays(
                itr.second, temp_itr->second,
                itr.second.size(),
                temp_itr->second.size());
            map3[itr.first] = arr;
        }
    }
    return map3;
}
 
// Driver code
int main()
{
    map > map1, map2, map3;
    map1.insert({ "key1", { 0, 1 } });
    map1.insert({ "key2", { 0, 1 } });
    map2.insert({ "key2", { 1, 2 } });
 
    // Function call
    map3 = mergeMap(map1, map2);
 
    for (auto itr : map3) {
        cout << "\"" << itr.first << "\", { ";
        for (auto x : itr.second)
            cout << x << " ";
        cout << "}\n";
    }
    return 0;
}


Javascript



输出
"key1", { 0 1 }
"key2", { 0 1 2 }

时间复杂度 O(N * log N + M * log M)
辅助空间 O(M + N)