Given three arrays firstkey[], secondkey[] and value[] where elements firstkey[i] and secondkey[i] denotes a composite key and their value is value[i], the task is to answer Q queries, each having two elements which denotes the composite key, whose corresponding value needs to be printed.
Examples:
Input: firstkey[] = {4, 4, 5}
secondkey[] = {2, 1, 3}
value[] = {5, 3, 8}, Q = {(4, 1)}
Output: 3
Explanation:
The composite key is present at firstkey[1] (= 4) and secondkey[1] (= 1)
Therefore, the corresponding value is value[1] = 3
Input: firstkey[] = {3, 4, 3}
secondkey[] = {7, 1, 3}
value[] = {2, 3, 6}, Q = {(3, 3)}
Output: 6
Explanation:
The composite key is present at firstkey[2] (= 3) and secondkey[2] (= 3)
Therefore, the corresponding value is value[2] = 6
Approach: The idea is to use map where the key of the map is a pair of two integers in C++, tuple in python denoting the respective elements of firstkey[] and secondkey[] which is mapped to the corresponding value[] element. This enables us to answer every query in the O(1) time.
For Example:
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}
Below is the implementation of the above approach:
C++
// C++ implementation to find the// value of the given composite keys#include <bits/stdc++.h>using namespace std;// Function to find the composite// key value for multiple queriesvoid findCompositeKey(int firstkey[], int secondkey[], int value[], int n, vector<pair<int, int> > q){ // Map to store the composite // key with a value map<pair<int, int>, 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 Codeint main(){ int firstkey[] = { 4, 4, 5 }; int secondkey[] = { 2, 1, 3 }; int value[] = { 5, 3, 8 }; int n = 3; vector<pair<int, int> > 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 keysimport 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 queriesstatic void findCompositeKey(int firstkey[], int secondkey[], int value[], int n, int[][] q){ // Map to store the composite // key with a value Map<Pair, Integer> 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 codepublic 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 |
Python3
# Python implementation to find the# value of the given composite keys# Function to find the composite# key value for multiple queriesdef findCompositeKey(firstkey, secondkey, value, n, q): # Map to store the composite # key with a value M = {} # Iterate over the arrays # and generate the required # mappings for i in range(n): M[(firstkey[i], secondkey[i])] = value[i] # Loop to iterate over the # elements of the queries for i in q: # Condition to check if there # is the composite key in map if (i[0], i[1]) in M: print(M[(i[0], i[1])]) else: print("Not Found")# Driver Codeif __name__ == '__main__': firstkey = [4, 4, 5] secondkey = [2, 1, 3] value = [5, 3, 8] n = 3 q = [(4, 1), (5, 2), (5, 3)] findCompositeKey(firstkey, secondkey, value, n, q) # This code is contributed by offbeat |
C#
// C# implementation to find the// value of the given composite keysusing System;using System.Collections.Generic;class Program{ // Function to find the composite key value for multiple // queries static void FindCompositeKey(int[] firstkey, int[] secondkey, int[] value, int n, List<Tuple<int, int> > q) { // Map to store the composite key with a value Dictionary<Tuple<int, int>, int> M = new Dictionary<Tuple<int, int>, int>(); // Iterate over the arrays and generate the required // mappings for (int i = 0; i < n; i++) { M.Add(Tuple.Create(firstkey[i], secondkey[i]), value[i]); } // Loop to iterate over the elements of the queries foreach(var i in q) { // Condition to check if there is the composite // key in map if (M.ContainsKey( Tuple.Create(i.Item1, i.Item2))) { Console.WriteLine( M[Tuple.Create(i.Item1, i.Item2)]); } else { Console.WriteLine("Not Found"); } } } // Driver Code static void Main(string[] args) { int[] firstkey = { 4, 4, 5 }; int[] secondkey = { 2, 1, 3 }; int[] value = { 5, 3, 8 }; int n = 3; List<Tuple<int, int> > q = new List<Tuple<int, int> >{ Tuple.Create(4, 1), Tuple.Create(5, 2), Tuple.Create(5, 3) }; FindCompositeKey(firstkey, secondkey, value, n, q); Console.ReadLine(); }}// This code is contributed by rutikbhosale |
Javascript
// JavaScript implementation to find the// value of the given composite keys// Function to find the composite// key value for multiple queriesfunction findCompositeKey(firstkey, secondkey, value, n, q) { // Map to store the composite // key with a value const M = new Map(); // Iterate over the arrays // and generate the required // mappings for (let i = 0; i < n; i++) { M.set(`${firstkey[i]}_${secondkey[i]}`, value[i]); } // Loop to iterate over the // elements of the queries for (let i of q) { // Condition to check if there // is the composite key in map if (M.has(`${i[0]}_${i[1]}`)) { console.log(M.get(`${i[0]}_${i[1]}`)); } else { console.log("Not Found"); } }}// Driver Codeconst firstkey = [4, 4, 5];const secondkey = [2, 1, 3];const value = [5, 3, 8];const n = 3;const q = [[4, 1], [5, 2], [5, 3]];findCompositeKey(firstkey, secondkey, value, n, q); |
3 Not Found 8
Time Complexity: O(nlogn)
Auxiliary Space: O(n) because using map
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Information to that Topic: geeksforgeeks.org/find-the-value-mapped-to-a-given-composite-key-for-every-query/ […]
… [Trackback]
[…] There you can find 94518 more Info to that Topic: geeksforgeeks.org/find-the-value-mapped-to-a-given-composite-key-for-every-query/ […]