-1

I am new to C++. I need to know how to copy from a list to a map in C++. A code sample would be great.

4

5 回答 5

3

您可以使用构造函数:

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

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

于 2012-05-14T13:05:26.220 回答
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()));

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

于 2012-05-14T12:58:31.830 回答
1

您不能copy用于源list和目标map,因为与和copy不直接兼容。listmap

于 2012-05-14T12:56:53.527 回答
0

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

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

于 2012-05-14T13:13:05.647 回答
0

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

前任:

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

等等

于 2012-05-14T13:00:04.620 回答