#質問概要
std::map
のwith hint の insert()であるiterator insert (iterator position, const value_type& val);
はどうやって与えられたヒント(iterator position
)が適当なヒントかどうかを判断しているんでしょうか??
各種ライブラリではどのようなロジックでこの関数が実装されているか知りたいです!
自分でライブラリのソースコードを見てみようと思ったのですが、難解でわかりませんでした。。。。。
#質問詳細
このリファレンスによると、C++98 において上記のinsert()については、
Hint for the position where the element can be inserted. C++98 The function optimizes its insertion time if position points to the element that will precede the inserted element. Notice that this is just a hint and does not force the new element to be inserted at that position within the map container (the elements in a map always follow a specific order depending on their key). Member types iterator and const_iterator are defined in map as bidirectional iterator types that point to
とあります。
つまり、map の平衡二分木の条件を満たすような挿入なら、新しい要素を挿入位置のヒントを表すイテレータpositionのすぐ前に挿入する。そうじゃなかったらO(log N)で最適な挿入場所を探索して挿入。ってことだと解釈してます。
↑
(そもそもこの理解あってる??)
とすると、正直にやろうとしたら、ヒントとして与えられたposition の前に新要素を挿入することが適当かどうか判断する作業が毎度必要ですよね
結局、root まで登りながら平衡が保たれているかの判断をしないといけないため、O(log N)の計算量が必要になります。
なので計算量を抑えられるというこの関数の効用がなくなってしまいますよね?
ライブラリでは、与えられたposition が適切なヒントかどうかをどうやって判断しているのでしょうか。
よろしくお願いします!!!!m(_ _)m
もし質問がわかりにくかったら修正依頼を出していただけたらもっと詳しく書きます!!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/20 05:16