Indexable set data structure

A comparison between Indices and UniqueVector on my machine:

julia> using Dictionaries, UniqueVectors, BenchmarkTools

julia> uv = UniqueVector{String}()
0-element UniqueVector{String}

julia> for i in 1:1000
           push!(uv, "foo_$i")
       end;

julia> is = Indices{String}()
0-element Indices{String}

julia> for i in 1:1000
           insert!(is, "foo_$i")
       end;

julia> @btime "foo_500" in $uv
  13.230 ns (0 allocations: 0 bytes)
true

julia> @btime "foo_500" in $is
  12.747 ns (0 allocations: 0 bytes)
true

julia> @btime findfirst(isequal("foo_500"), $uv)
  14.918 ns (0 allocations: 0 bytes)
500

julia> @btime gettoken($is, "foo_500")[2][2]
  12.546 ns (0 allocations: 0 bytes)
500

julia> Base.summarysize(uv)
92765

julia> Base.summarysize(is)
63813

so they seem pretty similar performance-wise, but Indices seems to have the edge, also Indices seems more memory optimized

2 Likes