第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

與std :: map等效的remove_if

與std :: map等效的remove_if

C++
守候你守候我 2019-10-17 13:08:16
我試圖根據(jù)特定條件從地圖中刪除一系列元素。我該如何使用STL算法?最初,我想到使用,remove_if但是由于remove_if對(duì)于關(guān)聯(lián)容器不起作用,因此無法使用。是否有適用于地圖的“ remove_if”等效算法?作為一個(gè)簡單的選擇,我想到了遍歷映射和擦除。但是在地圖上循環(huán)并擦除一個(gè)安全的選項(xiàng)嗎?(因?yàn)榈髟诓脸笞兊脽o效)我使用以下示例:bool predicate(const std::pair<int,std::string>& x){    return x.first > 2;}int main(void) {    std::map<int, std::string> aMap;    aMap[2] = "two";    aMap[3] = "three";    aMap[4] = "four";    aMap[5] = "five";    aMap[6] = "six";//      does not work, an error//  std::remove_if(aMap.begin(), aMap.end(), predicate);    std::map<int, std::string>::iterator iter = aMap.begin();    std::map<int, std::string>::iterator endIter = aMap.end();    for(; iter != endIter; ++iter)    {            if(Some Condition)            {                            // is it safe ?                aMap.erase(iter++);            }    }    return 0;}
查看完整描述

3 回答

?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

幾乎。


for(; iter != endIter; ) {

     if (Some Condition) {

          aMap.erase(iter++);

     } else {

          ++iter;

     }

}

如果您確實(shí)從迭代器中刪除了一個(gè)元素,則原來將其增加兩次。您可能會(huì)跳過需要?jiǎng)h除的元素。


這是我在許多地方見過使用和記錄的常見算法。


正確的是,擦除后迭代器無效,但是僅迭代器引用了要擦除的元素,其他迭代器仍然有效。因此iter++在erase()通話中使用。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
  • 3 回答
  • 0 關(guān)注
  • 1358 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)