c ++ std将列表复制到映射

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作为键.有没有办法做到这一点比循环遍历列表更优雅,并插入每个元素及其字符串作为地图的关键?

Mar*_*k B 6

这应该让你了解如何使用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的是:

插入迭代器是一种特殊类型的输出迭代器,旨在允许通常覆盖元素(例如复制)的算法自动在容器中的特定位置插入新元素.


Bla*_*ace 5

我喜欢标准库算法和lambda,但是没有比这更简单的了:

for (const A& value : list_A) {
    map_A.insert(std::make_pair(value.s, value));
}
Run Code Online (Sandbox Code Playgroud)

其他方法都等效于此代码,并且此循环可读且速度相同。