
рдХреБрдЫ рдХрдВрдкрдирд┐рдпрд╛рдВ рдСрдирд▓рд╛рдЗрди рд▓реЗрдЦрди рдХреЛрдб рдХрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░рддреА рд╣реИрдВред рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдУрд▓рдВрдкрд┐рдпрд╛рдб рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рддреБрд░рдВрдд рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдпрд╛ рддреЛ рдЫрджреНрдо рдХреЛрдб рдпрд╛ C ++ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рд╕рдорд╛рдзрд╛рди рдЕрдХреНрд╕рд░ C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХреА рддреИрдпрд╛рд░реА рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдЦрд╛рдХрд╛ рдмрдирд╛рдпрд╛ - рдПрд╕рдЯреАрдПрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕, рддрд╛рдХрд┐ рдХреАрдорддреА рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВред
рдЪрд▓реЛ рд╕реНрдкрд╖реНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЧрддрд┐рд╢реАрд▓ рдирд┐рд░рдВрддрд░ рд╕рд░рдгреА
рдПрдирд╛рд▓реЙрдЧ
std::vector
ред
рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░реЛрдВ рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛ рдпрд╛ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕реНрд▓рд╛рдЗрд╕ рд╣реИ:
vector := []int{}
рдЖрд╕рд╛рдиреА рд╕реЗ, рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
std::stack
рдПрдирд╛рд▓реЙрдЧ
std::stack
ред
рдПрдХ рдЖрджреЗрд╢рд┐рдд рд╕реЗрдЯ рдЬрд┐рд╕рдореЗрдВ рдирдП рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдореМрдЬреВрджрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдПрдХ рдЫреЛрд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ (рдЕрдВрддрд┐рдо-рдЗрди, рдкрд╣рд▓реЗ-рдЖрдЙрдЯ - LIFO) рдХреЛ рд░рдЦрд╛ рдЧрдпрд╛ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдлрд┐рд░ рд╕реЗ рдПрдХ рджреАрд╡рд╛рд░ рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИред рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╕реНрд▓рд╛рдЗрд╕ рдСрдкрд░реЗрд╢рди рдПрдХ рдирдИ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
std::queue
рдПрдирд╛рд▓реЙрдЧ
std::queue
рдФрд░
std::deque
ред
рдХрддрд╛рд░реЗрдВ рдирд┐рд░рдВрддрд░ рд╕рдордп рдореЗрдВ рд╢реБрд░реВ рдФрд░ рдЕрдВрдд рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВред рдЬреЛ рддрддреНрд╡ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ (рдкреНрд░рдердо-рдкреНрд░рдердо, рдкреНрд░рдердо-рдЖрдЙрдЯ - рдлреАрдлреЛ) рдХреЛ рдкрд╣рд▓реЗ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрдлрд░ рдЪреИрдирд▓ рдПрдХ рд░рд┐рдВрдЧ рдмрдлрд░ рдкрд░ рдПрдХ рдХрддрд╛рд░ рд╣реИ, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдкрд╛рдардХ рдФрд░ рд▓реЗрдЦрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреЛрд░рдЖрдЙрдЯ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреЛрдИ рдЕрд▓рдЧ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдЬрд╝рдмрд░рджрд╕реНрдд рд▓рд┐рд╕реНрдЯ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
https://github.com/gammazero/deque рдХреА рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рд╣реИред
import "github.com/gammazero/deque"
рдЪрд▓ рд░рд╣реЗ рд╕рдВрдЪрд╛рд▓рди:
func (q *Deque) PushBack(elem interface{}) func (q *Deque) PushFront(elem interface{}) func (q *Deque) PopBack() interface{} func (q *Deque) PopFront() interface{} func (q *Deque) Back() interface{} func (q *Deque) Front() interface{} func (q *Deque) At(i int) interface{}
рд╕рдВрджреЗрд╣ рд╕реЗ рдЬреБрдбрд╝реА рд╕реВрдЪреА
std::list
рдЕрдиреБрд░реВрдкред
рдЗрд╕рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд▓реЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдВрдХ рд╡рд╛рд▓реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣реИ:
import "container/list"
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдпрд╣ рд╕рдореНрдорд┐рд▓рди рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЕрдВрдд рдореЗрдВ, рддрддреНрд╡ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ, рдЬрд┐рд╕ рдкрд░ рд╕реВрдЪрдХ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рд╡рд┐рд▓реЛрдкрдиред
func (l *List) PushBack(v interface{}) *Element func (l *List) PushFront(v interface{}) *Element func (l *List) InsertAfter(v interface{}, mark *Element) *Element func (l *List) InsertBefore(v interface{}, mark *Element) *Element func (l *List) Remove(e *Element) interface{}
рдЧреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд▓рд╛ / рдкрд┐рдЫрд▓рд╛ рддрддреНрд╡ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдиреЛрдб рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реВрдЪреА рдореЗрдВ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпреЗ рддрд░реАрдХреЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рдмрд┐рдирд╛ред
func (e *Element) Next() *Element func (e *Element) Prev() *Element
рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░
рдПрдирд╛рд▓реЙрдЧ
std::priority_queue
рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдЖрдЗрдЯрдо рдХреЛ рд╕реНрдЯреИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рд╢реЗрд╖ рдХреА рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдиреНрдпреВрдирддрдо рдлреИрд▓реЗ рд╣реБрдП рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдЫреЛрд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЫреЛрд░ рдкрд░ рдЖрдЪреНрдЫрд╛рджрд┐рдд рдХреЛрдиреЗ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред
рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ
sort.Interface
(рдЬреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИред
sort.Interface
) рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдореЗрдВ
sort.Interface
ред
import "container/heap"
рдпрд╣ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ
рдмрд╛рдЗрдирд░реА рд╣реАрдк рд╣реИ ред рд╣реЗ (рд▓реЙрдЧ рдПрди) рдореЗрдВ рд╕рдореНрдорд┐рд▓рди рдФрд░ рд╡рд┐рд▓реЛрдкрдиред
func Pop(h Interface) interface{} func Push(h Interface, x interface{}) func Remove(h Interface, i int) interface{}
рдпрд╣ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рдПрдХ рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА рд╣реИред
рдПрдирд╛рд▓реЙрдЧ
std::unordered_map
ред
рдЖрдкрдХреЛ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдп рд╣рдЯрд╛рдПрдВ рдФрд░ рдФрд╕рдд рдкрд░ рдУ (1) рдХреЗ рд▓рд┐рдП рдПрдХ рддрддреНрд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирдХреНрд╢рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
unorderedMap := make(map[string]int)
рдореЗрдХ (рдорд╛рдирдЪрд┐рддреНрд░) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕реВрдЪрдХ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ:
"рд░рдирдЯрд╛рдЗрдо / рдореИрдк", std :: unordered_map рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ - рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рджреМрд░рд╛рди рдорд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдмрд╣реБрдд
рдПрдирд╛рд▓реЙрдЧ
std::unordered_set
ред
рд▓рдЧрднрдЧ рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓реНрдп рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ред
рдпрджрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдлрд┐рд░ рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреЗрд╡рд▓ рдЦрд╛рд▓реА рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
var m = make(map[string]struct{}) m["!"] = struct{}{} _, ok := m["!"]
рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрдЯрд┐рд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд▓рдп рдХрд░рдиреЗ, рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреЙрдХреНрд╕ рд╕реЗ рдЕрдВрддрд░, рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд┐рддрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
https://github.com/deckarep/golang-set import "github.com/deckarep/golang-set"
рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдмрд╕реЗ рдЬрд░реВрд░реА рд╣рд┐рд╕реНрд╕рд╛:
Add(i interface{}) bool Remove(i interface{}) Cardinality() int
рдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рднрд╛рдЧ рдореЗрдВ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реЗрдЯ рдЗрдВрдЯ рд╣реИ рдЬреЛ рд╣рд░ рдмрд┐рдЯ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред
import "golang.org/x/tools/container/intsets"
рдпрд╣ рдпреВрдирд┐рдпрди, рдЪреМрд░рд╛рд╣реЗ, рд╕реЗрдЯреЛрдВ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдПрдирд╛рд▓реЙрдЧреНрд╕
std::set
рдФрд░
std::map
ред
рдпрд╣ рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЗ рдиреМрд╕рд┐рдЦрд┐рдП рдмреБрд░реЗ рдПрдирд╛рд▓реЙрдЧ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╣рдЯрд╛рдиреЗ рдФрд░ рдЬрд╛рдБрдЪ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди O (рд▓реЙрдЧ рдПрди) рд╕реЗ рдкрд░реЗред
рд▓реЗрдХрд┐рди рдкреЗрдбрд╝ рд╕реНрдЯреЛрд░ рдиреЛрдбреНрд╕ рдХреЛ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рдирдХ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЛрдИ рдкреЗрдбрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдПрд╡реАрдПрд▓, рд░реЗрдб-рдмреНрд▓реИрдХ рдФрд░ рдмреА-рдЯреНрд░реА рдпреБрдХреНрдд
рднрдВрдбрд╛рд░ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
import "github.com/emirpasic/gods/trees/avltree"
рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА
рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ:
func (tree *Tree) Get(key interface{}) (value interface{}, found bool) func (tree *Tree) Put(key interface{}, value interface{}) func (tree *Tree) Remove(key interface{}) func (tree *Tree) Size() int func (tree *Tree) Keys() []interface{} func (tree *Tree) Values() []interface{} func (tree *Tree) Left() *Node func (tree *Tree) Right() *Node
рджреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реГрдХреНрд╖ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:
func (tree *Tree) Ceiling(key interface{}) (ceiling *Node, found bool)
рдХреБрдВрдЬреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрдбрд╝реА рд╕реЗ рдЫреЛрдЯреА рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
func (tree *Tree) Floor(key interface{}) (floor *Node, found bool)
рдПрдХ рдХреБрдВрдЬреА рд╕реЗ рдХрдо рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореМрдЬреВрджрд╛ рддрддреНрд╡ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдХреНрд╕рд░ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░реЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
select x from table where x <= $1 limit 1;
рдпрджрд┐ рдХреЛрдИ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ, рддреЛ рдпрд╣ рдмреА-рдЯреНрд░реА рдореЗрдВ рдмреЙрд░реНрдбрд░ рдХреЗ рд▓рд┐рдП 1 рд╕рд░реНрдЪ рдХреЗ рд▓рд┐рдП, рдУ (рд▓реЙрдЧ рдПрди) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд▓реЗрдХрд┐рди stl рдореЗрдВ рдпрд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИред
рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреА рддрд░рд╣, рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рддрддреНрд╡ рд╕реЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд░рдВрддрд░ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реЗрддрд╛ рд╣реИред рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рд╕реЗрдЯ рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ), рд▓реЗрдХрд┐рди рдЧрд▓рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВред рдпрд╣ рд▓рдЧрднрдЧ рд╕рднреА рдЧреИрд░-рдореМрдЬреВрджрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рд╣реЗрдЬрдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝рдирд╛ рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ред
рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ:
https://github.com/willf/bloom import "github.com/willf/bloom"
рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк
рдПрдкреАрдЖрдИ рдкрд░ рдЭрд╛рдВрдХ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╛рдирдХ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдРрд╕реА рдХреЛрдИ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИред
рд╕рдВрднрд╛рд╡реНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ред рдПрдХ рдЫреЛрдЯреА рд╕реА рддреНрд░реБрдЯрд┐ (% 0.4%) рдХреЗ рд╕рд╛рде, рдпрд╣ рдмрд┐рдирд╛ рдЪрд╛рдмреА рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд╛рд▓ рдореЗрдореЛрд░реА рдмрдЪрдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдп рдЖрдЧрдВрддреБрдХреЛрдВ рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╢реАрдШреНрд░ рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИ - рд╣рд╛рдЗрдкрд░рд▓реЙрдЧ рдЖрджрд░реНрд╢ рд╣реИред
рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред
https://github.com/axiomhq/hyperloglog import "github.com/axiomhq/hyperloglog"
рдЫрдВрдЯрд╛рдИ
рдПрдирд╛рд▓реЙрдЧреНрд╕
std::sort
рдПрдВрдб
std::stable_sort
ред
рдЙрдкрднреЛрдХреНрддрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдХреЗрд╡рд▓ 2 рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
рд╕реНрдерд┐рд░ (рд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рди рдмрджрд▓реЗрдВ [[4, 0], [1, 2], [1, 1], [5, 6]] -> [[1, 2], [1, 1], [4 , 0], [5, 6]])
рдФрд░ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред
рджреЛрдиреЛрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣реИрдВ:
func Sort(data Interface)
рдпрд╣ рдПрдХ Hoar рдХреНрд╡рд┐рдХреЙрд░реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЕрд╕реНрдерд┐рд░ рд╣реИред рд▓реЗрдХрд┐рди рд▓рдВрдмрд╛рдИ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП <12 рдвреЗрд░ рдЫрдБрдЯрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
func Stable(data Interface)
рдЕрдВрджрд░, рдпрд╣ рдПрдХ рдорд░реНрдЬ рдкреНрд░рдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП, рдЬрдм рдкреБрдирд░рд╛рд╡рд░реНрддреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо 20 рд╕реЗ рдХрдо рддрддреНрд╡реЛрдВ рдХреЗ рдмреНрд▓реЙрдХ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рд╕рдореНрдорд┐рд▓рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпреЗ рдУ (рдПрди рд▓реЙрдЧ рдПрди) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдмрдзрд╛рдИред рд╡рд┐рд╢рд┐рд╖реНрдЯ API рдХреЛ рдЬрд╛рдирдиреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред (рдпрджрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдЬрд╛рдирддреЗ рд╣реИрдВ - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред