Golang program that uses structs as map keys - GeeksforGeeks

10 May, 2020
A map in Golang is a collection of unordered pairs of key-value. It is widely used because it provides fast lookups and values that can retrieve, update or delete with the help of keys.
Syntax:
map[Key_Type]Value_Type{}
Example: var sample map[string]int
Here the sample is a map that has a string as key and int type as the value.
In maps, most of the data types can be used as a key like int, string, float64, rune, etc. Maps also allow structs to be used as keys. These structs should be compared with each other. A structure or struct in Golang is a user-defined type that allows to combine fields of different types into a single type.
Example of a struct:
type Student struct {
      name string 
      rollno int
      class string
      city string
}

Let’s see how to implement a struct in a map:
Example 1:
// Golang program to show how to// use structs as map keyspackage main  // importing required packagesimport "fmt"  //declaring a structtype Address struct {    Name    string    city    string    Pincode int}  func main() {      // Creating struct instances    a2 := Address{Name: "Ram", city: "Delhi", Pincode: 2400}    a1 := Address{"Pam", "Dehradun", 2200}    a3 := Address{Name: "Sam", city: "Lucknow", Pincode: 1070}      // Declaring a map    var mp map[Address]int          // Checking if the map is empty or not    if mp == nil {        fmt.Println("True")    } else {        fmt.Println("False")    }    // Declaring and initialising    // using map literals    sample := map[Address]int{a1: 1, a2: 2, a3: 3}    fmt.Println(sample)}
Output:
True
map[{Pam Dehradun 2200}:1 {Ram Delhi 2400}:2 {Sam Lucknow 1070}:3]

Iterating over a map: You can also run a loop to access and operate each map key individually.
Example 2:
// Golang program to show how to// use structs as map keyspackage main  // importing required packagesimport "fmt"  // declaring a structtype Address struct {    Name    string    city    string    Pincode int}  func main() {    // Creating struct instances    a1 := Address{"Pam", "Mumbai", 2200}    a2 := Address{Name: "Ram", city: "Delhi", Pincode: 2400}    a3 := Address{Name: "Sam", city: "Lucknow", Pincode: 1070}      // Declaring and initialising using map literals    sample := map[Address]int{a1: 1, a2: 2, a3: 3}    for str, val := range sample {        fmt.Println(str, val)    }      // You can also access a struct    // field while using a loop    for str := range sample {        fmt.Println(str.Name)    }}
Output:
{Ram Delhi 2400} 2
{Sam Lucknow 1070} 3
{Pam Mumbai 2200} 1
Pam
Ram
Sam

Adding key: value pairs in the map: Adding key:value pair in a map is done using the given syntax:
map_name[struct_instance]=value 
If a key-value pair already exists in the map it will just update the old pair with the new.
Example 3:
// Adding key:value pair in a mappackage main  // importing required packagesimport "fmt"  // declaring a structtype Student struct {    Name   string    rollno int    course string}  func main() {      // Creating struct instances    a1 := Student{"Asha", 1, "CSE"}    a2 := Student{"Aishwarya", 1, "ECE"}    a3 := Student{"Priya", 2, "MECH"}      // Declaring and initialising    // using map literals    mp := map[Student]int{a1: 1, a2: 2}    fmt.Println("Original map was", mp)    mp[a3] = 3    mp[Student{"Ram", 3, "CSE"}] = 4      // Values have their zero values    // Here initial value was 0 after     // incrementing it became 1    mp[Student{"Tina", 44, "EEE"}]++      fmt.Println("After adding key:value "+     "pairs to the map, Updated map is:", mp)}
Output:
Original map was map[{Aishwarya 1 ECE}:2 {Asha 1 CSE}:1]After adding key:value pairs to the map, Updated map is: map[{Aishwarya 1 ECE}:2 {Asha 1 CSE}:1 {Priya 2 MECH}:3 {Ram 3 CSE}:4 {Tina 44 EEE}:1]
Deleting a struct key from the map: You can delete a struct key from the map using the delete() function. It is an inbuilt function and does not return any value and does not do anything if the key does not present in the given map. The syntax for the same is as follows:
delete(map_name, struct_key)
Example 4:
// Deleting key: value pair in a mappackage main  // importing required packagesimport "fmt"  // declaring a structtype Student struct {    Name   string    rollno int    course string}  func main() {    // Creating struct instances    a1 := Student{"Asha", 1, "CSE"}    a2 := Student{"Aishwarya", 1, "ECE"}    a3 := Student{"Priya", 2, "MECH"}    a4 := Student{"Ram", 3, "CSE"}      // Declaring and initialising using map literals    mp := map[Student]int{a1: 1, a2: 2, a3: 3, a4: 4}      delete(mp, a4)    fmt.Println("The remaining map after deletion:")    for str, i := range mp {        fmt.Println(str, "=", i)    }  }
Output:
The remaining map after deletion:
{Asha 1 CSE} = 1
{Aishwarya 1 ECE} = 2
{Priya 2 MECH} = 3

Checking the existence of a key: value pair: You can check whether a struct is present in the map or not. Given below is the syntax to check the existence of a struct_key: value pair in the map:
// This gives the value and check result// If the check result is True, it means the key is present// If the check result is False, it means the key is missing and in that case value takes a zero valuevalue, check_variable_name:= map_name[key]
or
// Without value using the blank identifier// It will only give check result_, check_variable_name:= map_name[key]
Example 6:
// Golang program to check if a// struct key is presentpackage main  // importing required packagesimport "fmt"  // declaring a structtype Student struct {    Name   string    rollno int    course string}  func main() {    // Creating struct instances    a1 := Student{"Asha", 1, "CSE"}    a2 := Student{"Aishwarya", 1, "ECE"}    a3 := Student{"Priya", 2, "MECH"}    a4 := Student{"Ram", 3, "CSE"}      // Declaring and initialising    // using map literals    mp := map[Student]string{a1: "First",      a2: "Second", a3: "Third", a4: "Fourth"}      value, check := mp[a4]    fmt.Println("Is the key present:", check)    fmt.Println("Value of the key:", value)      _, check2 := mp[a2]    fmt.Println("Is the key present:", check2)  }
Output:
Is the key present: true
Value of the key: Fourth
Is the key present: true

Golang-Program
Picked
Go Language
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
strings.Replace() Function in Golang With Examples
Time Formatting in Golang
fmt.Sprintf() Function in Golang With Examples
How to Split a String in Golang?
How to convert a string in lower case in Golang?
Different Ways to Find the Type of Variable in Golang
Inheritance in GoLang
How to compare times in Golang?
Interfaces in Golang
How to Trim a String in Golang?