日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择

發布時間:2024/4/18 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有一個widget類如下:

class Widget { public:Widget();Widget(double weight);Widget& operator = (double weight); }

使用如下:

std::map<int, Widget> datas; // 語句1 datas[1] = 1.50; // 語句2

調用語句2之前,datas為空。
因此,語句2等同于先默認構造一對象,然后再對其進行賦值。

auto iter = datas.insert({1, Widge()}); *(iter->second) = widget(1.50);


效率更高的做法是:直接使用1.50作為參數,在datas中進行構造。

datas.insert({1, widget(1.50)});


這樣,一次構造函數調用代替了一次默認構造函數調用+1次拷貝賦值調用。

operator[]的設計目的是為了提供“添加和更新”的功能,當作為“添加”操作時,insert比operator[]效率更高當作更新操作時,即當一個等價的鍵已經在map中時,卻恰好相反。

datas[k] = v; // 使用operator [] 把k的值更新為vtypdef std::map<int, Widget> IntWidgetMap; datas.insert(IntWidgetMap::value_type(k, v)).first->second = v; // 使用insert把k的值更新為v


非常明顯,在更新數據時使用operator[]更加方便。

對效率的考慮使我們得出結論:當先map中添加元素時,要優先選用insert,而不是operator[]。
而從效率和美學的觀點考慮,結論是:當更新已經在map中的元素的值時,要優先選擇operator[]。

總結

以上是生活随笔為你收集整理的12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。