我是C ++的新手。我需要知道如何在C ++中从list
复制到map
。代码示例会很棒。
答案 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
,因为copy
与list
和{{1}不直接兼容}}
答案 3 :(得分:0)
如名称所示,列表类是一个对象列表。然而,地图是对的列表。所以如果你有一个水果列表“苹果”,“梨”,“西瓜”,你可以将它们放入地图中,但必须将它们映射到某些东西(希望有意义的东西)。
例如:
map<string, string> mapFruits;
mapFruits["apple"] = "red";
mapFruits["pear"] = "yellow";
mapFruits["watermelon"] = "green";
等
答案 4 :(得分:0)
网上有很多关于如何从列表中输出值以及如何向地图添加值的示例。所以我在此不再重复。看看cplusplus.com(虽然不是每个人都喝茶。)
警告:地图只会存储唯一的键控值,因此您可能会发现地图项与列表项之间没有1:1的映射(即您将获得相同或更少的值在你的地图中)所以首先要清楚你使用每个容器的原因。