2013-06-22 66 views
0

是否有一個內置方法可以移除和元素(即從給定的關鍵字的map)並返回移除的元素?C++:從容器中移除元素並將其取回

+1

使用['at'](http://en.cppreference.com/ w/cpp/container/map/at)來訪問該元素,然後['erase'](http://en.cppreference.com/w/cpp/container/map/erase)將其從集裝箱。 – 0x499602D2

+0

@ 0x499602D2 1.我還沒有使用C++ 11。 2.這就是我所要求的,如果我需要這樣做,如果你確實知道這一點,你可以添加它作爲答案。 – Subway

回答

0

沒有內置的方法來做到這一點,然而你可以通過訪問它來存儲元素,然後刪除它。 擦除需要你指定key.If它是一個多圖,你應該刪除的位置。

0

這裏是一個功能,可以使用(C++ 11):

#include <iostream> 
#include <map> 

template<typename T> 
typename T::mapped_type removeAndReturn(T& mp, const typename T::key_type& val) { 
    auto it = mp.find(val); 
    auto value = std::move(it->second); 
    mp.erase(it); 
    return value; 
} 

int main() { 
    std::map<int, int> m; 
    m[3] = 4; 
    std::cout << "Map is empty: " << std::boolalpha << m.empty() << std::endl; 
    std::cout << "Value returned: " << rm_and_return(m, 3) << std::endl; 
    std::cout << "Map is empty: " << std::boolalpha << m.empty() << std::endl; 
} 

輸出:

Map is empty: false 
Value returned: 4 
Map is empty: true 
相關問題