如何根据键列表从另一个地图获取地图的子集? 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
我有一张旧地图样本:
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