是否有一个 std 迭代器可以用来使用 std 算法(例如 std::copy)将元素插入到 std::map 中?
我需要一个容器来将一个对象链接到一个字符串,我考虑使用 std::map。有没有更好的容器?忘了说 - 物品需要分类。
我认为OP正在寻找的是
std::inserter(mymap, mymap.end())
所以你可以这样做:
std::copy( inp.begin(), inp.end(), std::inserter(mymap, mymap.end()) );
输入类型必须是您的映射采用的对类型,否则您的算法需要
std::transform
以及函数/函子才能将输入类型转换为这样的 std::pair
。
inserter 实际上并不是一个迭代器,而是一个生成迭代器的模板化函数(
std::insert_iterator
,这是一个模板化类型,但类型会在函数调用中自动解析)。
为了插入
std::map
,您需要使用std::make_pair()
。
例如:
std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));
尝试类似的事情。 :)
是的,
std::copy
可以将多个元素插入到映射中,如果您使用std::insert_iterator
作为OutputIterator(使用辅助函数std::inserter
来创建这些元素;这样,可以推断模板类型)。 std::map 的“元素”是键值对,您可以使用 std::make_pair
创建它们,如 Prasoon 所示。 (实际类型是 std::pair<Key, Value>
;同样,辅助函数允许模板类型推导。)如果您有一个序列中的键和另一个序列中的值,则应该能够使用 std::transform
生成一系列键-值对。
我可以得到 50 声望来发表评论,但我删除了我最受欢迎的问题,因为它离家太近了。 无论如何,它应该作为自动插入不是吗?