如何根据键列表从另一个地图获取地图的子集? C++

How to get a subset of map from another map based on a list of keys? C++

我有一张旧地图样本:

map<string, int> map_ = {"A": 1, "B": 2, "C": 3, "D": 4, "E": 5}

和键列表:

vector<string> list_ = {"B", "D", "E"}

我想根据密钥列表从旧地图获取新地图:

map<string, int> mapNew_ = {"B": 2, "D": 4, "E": 5}

有什么聪明的方法可以做到这一点吗?

您可以使用基于范围的简单 for 循环来完成此操作。那看起来像

map<string, int> mapNew_;
for (const auto& e : list_)
    mapNew_[e] = map_[e];

如果 list_ 可能包含地图中不存在的元素,那么您需要添加检查,例如

map<string, int> mapNew_;
for (const auto& e : list_)
    if (auto it = map.find(e); it != map.end())
        mapNew_[e] = it->second; // no map_[e] here since it already points to the needed value