如何插入std::map?

问题描述 投票:0回答:4

是否有一个 std 迭代器可以用来使用 std 算法(例如 std::copy)将元素插入到 std::map 中?

我需要一个容器来将一个对象链接到一个字符串,我考虑使用 std::map。有没有更好的容器?忘了说 - 物品需要分类。

c++ stl
4个回答
44
投票

我认为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
,这是一个模板化类型,但类型会在函数调用中自动解析)。


14
投票

为了插入

std::map
,您需要使用
std::make_pair()

例如:

std::map<int,std::string> Map;
Map.insert(std::make_pair(5,"Hello"));

尝试类似的事情。 :)


5
投票

是的,

std::copy
可以将多个元素插入到映射中,如果您使用
std::insert_iterator
作为OutputIterator(使用辅助函数
std::inserter
来创建这些元素;这样,可以推断模板类型)。 std::map 的“元素”是键值对,您可以使用
std::make_pair
创建它们,如 Prasoon 所示。 (实际类型是
std::pair<Key, Value>
;同样,辅助函数允许模板类型推导。)如果您有一个序列中的键和另一个序列中的值,则应该能够使用
std::transform
生成一系列键-值对。


0
投票

我可以得到 50 声望来发表评论,但我删除了我最受欢迎的问题,因为它离家太近了。 无论如何,它应该作为自动插入不是吗?

© www.soinside.com 2019 - 2024. All rights reserved.