zoukankan      html  css  js  c++  java
  • go set如何表示

    一、Go 的数据结构

    Go 内置的数据结构并不多。最常用的两种数据结构分别是 slice 和 map,即切片和映射。( 切片的底层就是数组,因为有了切片比较少用)

    除了 Go 内置的数据结构,还有一些数据结构是由 Go 的官方 container 包提供,如 heap 堆、list 双向链表和ring 回环链表。(了解原理,看看文档也就会用了)

    二、set

    set 和 bitset ,Go 当前还没有以任何形式提供。(编程语言中没有go的选项

    package set
    
    import (
        "fmt"
        "sort"
    )
    
    //空缓存
    type Empty struct{}
    
    var empty Empty
    
    //构造一个set,首先定义set的类型
    type Set struct {
        m map[int]Empty
    }
    
    //产生set的工厂
    func SetFactory() *Set {
        return &Set{
            m: map[int]Empty{},
        }
    }
    
    //添加元素
    func (s *Set) Add(val int) { //表示给 Set声明一个方法
        s.m[val] = empty
    }
    
    //删除元素
    func (s *Set) Remove(val int) {
        delete(s.m, val)
    }
    
    //获取长度
    func (s *Set) Len() int {
        return len(s.m)
    }
    
    //清空set
    func (s *Set) Clear() {
        s.m = make(map[int]Empty)
    }
    
    //遍历set
    func (s *Set) Traverse() map[int]Empty {
        return s.m
        //for v := range s.m {
        //    fmt.Println(v)
        //}
    }
    
    //set 转 list
    func (s *Set) SetToList() []int {
        var a []int
        for v := range s.m {
            a = append(a, v)
        }
        return a
    }
    
    //排序输出
    func (s *Set) SortTraverse() {
        vals := make([]int, 0, s.Len())
    
        for v := range s.m {
            vals = append(vals, v)
        }
    
        //排序
        sort.Ints(vals)
    
        for _, v := range vals {
            fmt.Println(v)
        }
    }
    
    //判读key存在
    func (s *Set) KeyExist(key int) bool {
        if _, ok := s.m[key]; ok {
            return true
        } else {
            return false
        }
    }
    
    //set 并集
    func (s *Set) Union(b *Set) {
        for key, _ := range b.m {
            s.m[key] = empty
        }
    }

    三、bitset

    bitset 的话,https://godoc.org/github.com/willf/bitset#example-BitSet-Len  (go文档)   https://github.com/yourbasic/bit/blob/master/set.go  这个也可以参考

    bitset 中每个数子用一个 bit 即能表示,对于一个 int8 的数字,我们可以用它表示 8 个数字,能帮助我们大大节省数据的存储空间。

    bitset 最常见的应用有 bitmap 和 flag,即位图和标志位。

    bitset 工作中很少用到  https://juejin.im/post/5ceffeddf265da1bc8540df5 

  • 相关阅读:
    poj 1466 Girls and Boys
    poj 1486 Sorting Slides
    poj 2112 Optimal Milking
    poj 1274 The Perfect Stall
    SHoj 420 购买装备
    poj 2987 Firing
    SHoj A序列
    FOJ Problem 2271 X
    XidianOJ 1028 数字工程
    XidianOJ 1030 三数和
  • 原文地址:https://www.cnblogs.com/Mint-diary/p/13271556.html
Copyright © 2011-2022 走看看