為什麼std set不支援 運算子?

時間 2021-06-01 05:23:24

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不...