STL中,為什麼遍歷map比遍歷list慢?

時間 2021-05-31 09:47:39

1樓:MashPlant

之所以沒有這樣做,我推測原因有

毫無疑問這會帶來額外的時間,記憶體開銷,對於沒有遍歷map需求的使用者來說這一開銷是沒有意義的,don't pay for what you don't use

無論是否這樣做,遍歷map都是O(n)的,區別僅在於常係數,這樣做的好處僅僅在於查詢前驅後繼可以在常數時間內完成

2樓:

線性遍歷是可以做到的,但是我不知道代價如何。我的想法是加乙個成員函式

void map::get_list(vector<>&key,vector<>&val);直接通過中序遍歷將遍歷結果儲存在兩個陣列中,但這麼新增後會引發哪些其他問題我就不知道了。也許正是因為一些隱患,stl才沒有提供對map的線性遍歷方案吧。

3樓:

因為STL本身就不是主要為遍歷設計的,而線性化操作會付出開銷,只需要查詢的時候不需要這種開銷。C++的原則之一就是不讓使用者為不需要的開銷買單。

std::

vector

pair

T2>>

cache

(MyMap

.begin

(),MyMap

.end

());

遍歷速度最快的當然是vector啊……頻繁訪問的資料手動轉存成vector會比較好。另外deque也可以酌情考慮。

Java遍歷HashSet為什麼輸出是有序的?

一句話,Integer的hash code就是本身。向HashSet中插入乙個Integer時,對應的底層實際儲存值的陣列的索引應該是 integer length。題主隨機生成了10000個從0到29的整數,但Set保留的唯一值只有0 29這30個數。因為HashSet的自動擴容機制,最終的底層陣...

為什麼具有遍歷性的隨機過程一定是平穩的?

Ten2one 遍歷性是指某統計量的時域平均等於集總平均,則稱此統計量是具有遍歷性的。如果不是平穩隨機過程,那麼它的集總平均是變化的,也就不能用時域平均來確定集總平均啦。 Jonnycg 通俗地來形容一下平穩和遍歷性。假設城市a有兩個公園A,B,分別處於兩個中心。假設人口均勻分布,那麼我們預期一年之...

音標 m 的發音是 目 。請問,為什麼 map 的音標中, m 發的是 沫 ?

TairanoKaeru m 是個鼻子音,它既不發目,也不發沫,而是你在發目和沫時張嘴之前的那個鼻音。當然你要是真不張嘴,它會被記成 m 因為確實,張嘴之後這個音向母音的過渡段會受到一些影響,不盡相同。 超級詞力 m 音的發音方法很簡單,和我們漢語拼音中的聲母m基本上是一樣的。但是為什麼我們會覺得英...