go语言的map以及红黑树的map
生活随笔
收集整理的這篇文章主要介紹了
go语言的map以及红黑树的map
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
結論:
1. go語言自帶的map是基于hash表實現的
2. c++語言中map是基于紅黑樹實現的
3. go語言很多第三方庫中提供了基于紅黑樹map的實現
?
這里我們推薦的是由Social Explorer團隊開源的gods框架,簡稱"上帝",其實是GoDS(Go Data Structures),是數據結構與算法相關的框架
官網:https://www.socialexplorer.com/
GitHub?https://github.com/emirpasic/gods
使用如下圖:
示例代碼如下(有很詳細的注釋,基本上C++中map有的,這里都有對應的方法):
package mainimport ("fmt"rbt "github.com/emirpasic/gods/trees/redblacktree"utils "github.com/emirpasic/gods/utils" )// 玩家結構體的定義 type player struct {playerID uint64 // 玩家IDscore int64 // 分數nation int32 // 國家ID }// 新建一個玩家 func newPlayer(playerID uint64, score int64, nation int32) *player {return &player{playerID: playerID,score: score,nation: nation,} }// 遍歷打印已一個map func printMap(t *rbt.Tree) {iter := t.Iterator()for iter.Next() {pPlayer := iter.Value().(*player)fmt.Printf("key:%v, value:%v\n", iter.Key().(uint64), pPlayer)} }func main() {// 四個玩家player1 := newPlayer(1, 1, 1)player2 := newPlayer(2, 2, 2)player3 := newPlayer(3, 3, 3)player4 := newPlayer(4, 4, 4)// 新建紅黑樹(自帶比較函數,庫中帶了幾乎所有的基礎類型,如果還是不夠,可以自定義)allPlayers := rbt.NewWith(utils.UInt64Comparator)// 插入allPlayers.Put(player1.playerID, player1)allPlayers.Put(player2.playerID, player2)allPlayers.Put(player3.playerID, player3)// 重復插入key(下面會發現會覆蓋)allPlayers.Put(player3.playerID, player4)// 遍歷fmt.Println("插入后遍歷")printMap(allPlayers)// 獲取存在的keypValue, exist := allPlayers.Get(uint64(1))if exist {pPlayer := pValue.(*player)fmt.Printf("\n獲取存在的key:1 的玩家信息:%v \n", pPlayer)}// 獲取不存在的keypValue, exist = allPlayers.Get(uint64(111))if !exist {fmt.Printf("獲取不存在的key:111 的玩家信息:%v \n", pValue)}// 查找最后一個比5小的迭代器信息(包括5)pNode, exist := allPlayers.Floor(uint64(5))if exist {pPlayer := pNode.Value.(*player)fmt.Printf("查找最后一個比key:5小(包括5)的迭代器信息:%v \n", pPlayer)}// 查找首個比2大的迭代器信息(包括2)pNode, exist = allPlayers.Ceiling(uint64(2))if exist {pPlayer := pNode.Value.(*player)fmt.Printf("查找首個比key:2大的迭代器信息:%v \n", pPlayer)}// 刪除allPlayers.Remove(uint64(123)) // 刪除不存在的keyallPlayers.Remove(uint64(2)) // 刪除存在的key// 刪除后再次遍歷fmt.Println("\n刪除后遍歷")printMap(allPlayers) }?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的go语言的map以及红黑树的map的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: go语言的rune类型
- 下一篇: 树的高度 递归法和非递归法