【问题标题】:c++: Remove element from container and get it backc ++:从容器中删除元素并将其取回
【发布时间】:2013-06-22 20:16:17
【问题描述】:

是否有移除和元素的内置方法(即从给定键的地图中)并返回被移除的元素?

【问题讨论】:

  • 使用at 访问该元素,然后使用erase 将其从容器中移除(在其位置)。
  • @0x499602D2 1. 我还没有使用 C++11。 2.这就是我要问的,如果我需要这样做,如果你确定它,你可以添加它作为答案。

标签: c++ stl containers


【解决方案1】:

没有内置方法可以执行此操作,但是您可以通过访问元素来存储元素,然后将其删除。 擦除需要您指定键。如果是多图,则应使用位置擦除。

【讨论】:

    【解决方案2】:

    这是一个你可以使用的函数(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
    

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 1970-01-01
      • 2019-07-07
      • 2012-03-13
      • 2016-04-05
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2012-03-28
      相关资源
      最近更新 更多