This is way out of my league, but have you had a look at Michals priority search queues?
https://github.com/michalmarczyk/psq.clj <https://github.com/michalmarczyk/psq.clj> He had a presentation about them at Euroclojure in 2016 Priority Search Queues: 1.5 dimensional Tree Search - MichaĆ Marczyk <https://www.youtube.com/watch?v=pZ9gBKO_qCA&index=8&list=PLZdCLR02grLowQLPjuZ7k3pl2ScEyW7A7> Erik. > On 8 Apr 2017, at 05:49, Brian Beckman <bc.beck...@gmail.com> wrote: > > I have found a few data types in Clojure that support search and priority > queues. In particular, I found > > Priority Map https://github.com/clojure/data.priority-map > PSQ https://goo.gl/Dw4gkV > data.avl https://goo.gl/e07q7H > > I would be grateful for a few clarifying words on whether any of these can > meet my requirements out-of-the-box before I begin a deep-dive. Forgive me > for being a bit lazy (actually, just in a hurry), but I thought I'd check > whether someone knows an answer for me off-the-cuff. > > I need collections of [k v] pairs supporting efficient peek, pop, get, and > subseq-style search on either the key space or on the value space. I need all > operations on just one of the two spaces. > > Priority map supports efficient peek and pop of the value space on its API > surface, but I don't see a get subseq (or rsubseq) or other way to quickly > search the value space on the API surface. The comments in the source suggest > that there is an auxiliary inverse sorted map from values to keys. The > supported "get" operation seems to operate on the key space, but I could use > one on the value space (see line 313 of https://goo.gl/qhfXKL). Perhaps that > inverse map easy to get at, in which case I'll be done. > > PSQ supports peek and pop on values, and efficient search on keys, according > to its documentation. Do I read that correctly? > > I have not read the documentation for data.avl deeply enough to know whether > it will do my job out-of-the box. But I am sure I could build what I need on > top of AVL trees, RB trees, 2-3 trees, splay trees, etc. I'm just looking to > save myself work (and use tested software). > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > <http://groups.google.com/group/clojure?hl=en> > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com > <mailto:clojure+unsubscr...@googlegroups.com>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.