📜  为每个查询查找映射到给定组合键的值

📅  最后修改于: 2021-10-27 07:20:53             🧑  作者: Mango

给定三个数组firstkey[]secondkey[]value[]其中元素firstkey[i]secondkey[i]表示一个组合键,它们的值是value[i] ,任务是回答Q 个查询,每个查询有两个元素表示复合键,需要打印其对应的值。
例子:

方法:思路是使用map,其中map的key是C++中的一对两个整数, Python的tuple分别表示firstkey[]secondkey[]分别映射到对应的value[]元素。这使我们能够在O(1)时间内回答每个查询。
例如:

Given arrays be -
firstkey[] = {4, 4, 5}
secondkey[] = {7, 1, 3}
value[] = {5, 3, 8}

Iterating over the Array, the map thus 
formed is {(4, 7): 5, (4, 1): 3, (5, 3): 8}

下面是上述方法的实现:

C++
// C++ implementation to find the
// value of the given composite keys
  
#include 
using namespace std;
  
// Function to find the composite
// key value for multiple queries
void findCompositeKey(int firstkey[],
                      int secondkey[], int value[], int n,
                      vector > q)
{
    // Map to store the composite
    // key with a value
    map, int> M;
  
    // Iterate over the arrays
    // and generate the required
    // mappings
    for (int i = 0; i < n; i++) {
        M.insert({ { firstkey[i], secondkey[i] },
                   value[i] });
    }
  
    // Loop to iterate over the
    // elements of the queries
    for (auto i : q) {
  
        // Condition to check if there
        // is the composite key in map
        if (M.find({ i.first,
                     i.second })
            != M.end()) {
            cout << M[{ i.first, i.second }]
                 << endl;
        }
        else {
            cout << "Not Found" << endl;
        }
    }
}
  
// Driver Code
int main()
{
    int firstkey[] = { 4, 4, 5 };
    int secondkey[] = { 2, 1, 3 };
    int value[] = { 5, 3, 8 };
    int n = 3;
    vector > q = { { 4, 1 },
                                  { 5, 2 },
                                  { 5, 3 } };
  
    findCompositeKey(firstkey, secondkey,
                     value, n, q);
    return 0;
}


Java
// Java implementation to find the
// value of the given composite keys
import java.util.*;
  
class GFG{
  
static class Pair
{
    int first, second;
  
    Pair(int first, int second)
    {
        this.first = first;
        this.second = second;
    }
  
    @Override
    public boolean equals(Object obj)
    {
        if (obj == null)
            return false;
        if (!(obj instanceof Pair))
            return false;
        if (obj == this)
            return true;
              
        return (this.first == ((Pair)obj).first) &&
               (this.second == ((Pair)obj).second);
    }
  
    @Override
    public int hashCode()
    {
        return this.first + this.second;
    }
}
  
// Function to find the composite
// key value for multiple queries
static void findCompositeKey(int firstkey[],
                            int secondkey[], 
                            int value[], int n,
                            int[][] q)
{
      
    // Map to store the composite
    // key with a value
    Map M = new HashMap<>();
  
    // Iterate over the arrays
    // and generate the required
    // mappings
    for(int i = 0; i < n; i++)
    {
        M.put(new Pair(firstkey[i], 
                      secondkey[i]), 
                          value[i]);
    }
  
    // Loop to iterate over the
    // elements of the queries
    for(int i = 0; i < q.length; i++)
    {
  
        // Condition to check if there
        // is the composite key in map
        if (M.containsKey(new Pair(q[i][0],
                                   q[i][1])))
        {
            System.out.println(M.get(new Pair(q[i][0],
                                              q[i][1])));
        }
        else 
        {
            System.out.println("Not Found");
        }
    }
}
  
// Driver code
public static void main(String[] args)
{
    int firstkey[] = { 4, 4, 5 };
    int secondkey[] = { 2, 1, 3 };
    int value[] = { 5, 3, 8 };
    int n = 3;
      
    int[][] q = { { 4, 1 },
                  { 5, 2 },
                  { 5, 3 } };
  
    findCompositeKey(firstkey, secondkey,
                     value, n, q);
}
}
  
// This code is contributed by offbeat


输出:
3
Not Found
8