在C ++中将列表复制到Map

时间:2012-05-14 12:55:28

标签: c++

我是C ++的新手。我需要知道如何在C ++中从list复制到map。代码示例会很棒。

5 个答案:

答案 0 :(得分:3)

std::map是一个关联容器,包含键值对。 std::list仅包含值。因此,除非列表包含正确类型的键值对,否则这个问题没有意义。

如果您的列表恰好包含与目标地图的值类型匹配的std::pairs,您可以使用迭代器构造函数初始化地图:

std::list<std::pair<std::string, int>> = ....;
std::map<std::string, int> m(l.begin(), l.end());

或者您可以使用std::copy算法,如其他地方所建议的那样:

std::map<std::string, int> m1;
std::copy(l.begin(), l.end(), std::inserter(m1, m1.begin()));

但请注意,“副本”可能没有按预期执行,因为地图无法保存具有相同键的值。

答案 1 :(得分:3)

您可以使用构造函数:

std::list<std::pair<int, std::string>> thelist = /* ... */ ;
std::map<int, std::string> themap(thelist.begin(), thelist.end());

您的列表需要包含适合地图的键值对。

答案 2 :(得分:1)

您不能将copy用于来源list和目标map,因为copylist和{{1}不直接兼容}}

答案 3 :(得分:0)

如名称所示,列表类是一个对象列表。然而,地图是对的列表。所以如果你有一个水果列表“苹果”,“梨”,“西瓜”,你可以将它们放入地图中,但必须将它们映射到某些东西(希望有意义的东西)。

例如:

map<string, string> mapFruits;
mapFruits["apple"] = "red";
mapFruits["pear"] = "yellow";
mapFruits["watermelon"] = "green";

答案 4 :(得分:0)

网上有很多关于如何从列表中输出值以及如何向地图添加值的示例。所以我在此不再重复。看看cplusplus.com(虽然不是每个人都喝茶。)

警告:地图只会存储唯一的键控值,因此您可能会发现地图项与列表项之间没有1:1的映射(即您将获得相同或更少的值在你的地图中)所以首先要清楚你使用每个容器的原因。