Sub*_*way 5 c++ stl stdmap stdstring
考虑以下:
struct A
{
int i;
double d;
std::string s;
};
std::list<A> list_A;
Run Code Online (Sandbox Code Playgroud)
我想将list_A的所有元素复制到一个映射中,以便映射中的每一对都包含一个来自list_A的元素作为值,其字符串s作为键.有没有办法做到这一点比循环遍历列表更优雅,并插入每个元素及其字符串作为地图的关键?
这应该让你了解如何使用transform:
std::pair<std::string, A> pairify(const A& a) { return std::make_pair(a.s, a); }
std::transform(list.begin(), list.end(), std::inserter(map, map.end()), pairify);
Run Code Online (Sandbox Code Playgroud)
该理由使用inserter的是:
插入迭代器是一种特殊类型的输出迭代器,旨在允许通常覆盖元素(例如复制)的算法自动在容器中的特定位置插入新元素.
我喜欢标准库算法和lambda,但是没有比这更简单的了:
for (const A& value : list_A) {
map_A.insert(std::make_pair(value.s, value));
}
Run Code Online (Sandbox Code Playgroud)
其他方法都等效于此代码,并且此循环可读且速度相同。