1樓:
a[key] = value
set 只有key沒有value,加了會導致歧義。
至於「返回第k個元素」,正如你所說的,需要統計子節點的數量。那麼儲存統計結果就需要額外開銷,對於不需要這個功能的人就是空間負擔。
2樓:暮無井見鈴
我估計是因為 Stepanov 設計 STL 時認為 BST 的 rank 操作是相對少用的需求。(需要出處)
而相關操作需要給結點增加記錄 size 的成員,於是一開始就沒有加上。
不過這樣帶來的後果的是如果需要 rank 操作就需要自己寫樹。不知道有沒有人寫過基於 SBT 從而 rank 操作代價更低的關聯容器。
3樓:
stl的紅黑樹沒有維護子節點的數量,因此不能在log n時間內查詢第k大的元素。
之所以沒有維護,是因為維護是有額外開銷的,這樣的開銷對於沒有用到查詢第k大元素的使用者來說是多餘的,不符合C++的"Don't pay for what you don't use."的原則。
如果一定想要在log n時間內查詢第k大的元素,且不在意相容性的話,可以考慮使用pbds中的紅黑樹。
4樓:
對於 std::map 而言 std::map m = , }; 時 m["a"] 返回的是1所在單元的引用。
對於 std::set s = ; 而言 s["a"] 應該是個什麼型別呢?
為什麼google protobuf不支援map的序列化和反序列化
雖然現在3.0已經支援,但個人覺得沒有必要。使用map必然會用到更多的空間,使用repeat和屬性名結合完全可以解決map的需求 cswuyg 現在它是支援的。proto2的文件就已經提到了Maps Language Guide 但我用protoc2.6編譯的時候,map關鍵字無法通過編譯,prot...
為什麼過載小於運算子,在return語句裡返回大於?
因為priority queue在預設情況下會使用 準確地說是less 進行比較運算,且缺省會構造大根堆。例如,在我的環境中,priority queue的原型是 template Tp,typename Sequence vector Tp typename Compare less Sequen...
逗號運算子前面的有什麼意義?
瀉藥 在C 中任何一項語法規則總有它的用途,不管是一開始設計的還是後來被挖掘出的。例如,要求寫乙個函式模板,若引數x可以自增則增加,否則什麼都不幹。template T auto try inc T x decltype x void try inc 利用表示式SFINAE可以輕鬆實現,因為如果x不...