为什么我可以在地图中使用push_back,但不能在集合中使用back_inserter? 关于C++引物第五的第十一章(关于关联容器):
关联容器不支持特定于容器位置的顺序操作,例如向前推或向后推。因为元素是基于其键存储的,所以这些操作对于关联容器来说毫无意义 然而,在我练习了两个练习之后,我感到困惑:为什么我可以在地图中使用push_back,但不能在集合中使用back_inserter? 关于C++引物第五的第十一章(关于关联容器):,c++,C++,关联容器不支持特定于容器位置的顺序操作,例如向前推或向后推。因为元素是基于其键存储的,所以这些操作对于关联容器来说毫无意义 然而,在我练习了两个练习之后,我感到困惑: 给定一个映射,要求将向量添加到给定的键,我的(工作)解决方案是: using Map = map<string, vector<string>>; Map my_map; for(string ln; cin >> ln) for(string cn; cin >> cn)
映射
,要求将向量
添加到给定的键
,我的(工作)解决方案是:
using Map = map<string, vector<string>>;
Map my_map;
for(string ln; cin >> ln)
for(string cn; cin >> cn)
my_map[ln].push_back(cn);
使用Map=Map;
绘制我的地图;
用于(字符串项次;cin>>项次)
用于(字符串cn;cin>>cn)
我的地图[ln]。推回(cn);
copy(v.begin(),v.end(),back_inserter(c))代码>合法还是非法
我所知道的是,
back\u插入器
不起作用,因为地图上没有push\u-back
您不使用push\u-back
。您正在地图中包含的字符串向量上使用它
back\u inserter
在内部使用push\u
,关联容器缺少这种方法,因此无法使用它。在地图上不使用push\u
。您正在地图中包含的字符串向量上使用它
back\u inserter
在内部使用了push\u-back
,关联容器缺少这种方法,因此无法使用它。您的解决方案不会将推回到关联容器中,而是将它推到其中存储的向量中。那是不一样的
正如初级读物所说,一个multiset
没有顺序的push_back
方法,所以你不能使用std::copy(…,…,std::back_inserter(…)
。你的解决方案不是将推回到一个关联容器,而是到一个存储在该容器中的向量。那是不一样的
正如初级读物所说,一个multiset
没有顺序的push\u-back
方法,所以你不能使用std::copy(…,…,std::back\u inserter(…)
。我的映射[ln]。push\u-back(cn)
不调用映射上的push\u-back
(我的映射
),它在map
smapped\u type
上调用push\u back
,它是vector
——您可以使用操作符[]
(my\u map[ln]
)访问它
您的声明my\u map[ln]。push\u back(cn)
本质上等同于:
vector<string>& v = my_map[ln];
v.push_back(cn);
vector&v=my_map[ln];
v、 推回(cn);
my\u map[ln]。push\u-back(cn)
不调用map
上的push\u-back
(my\u-map
),它调用map
smap\u-type
上的push\u-back
,这是向量
-您可以通过操作符[/code>访问它(my\code>)
您的声明my\u map[ln]。push\u back(cn)
本质上等同于:
vector<string>& v = my_map[ln];
v.push_back(cn);
vector&v=my_map[ln];
v、 推回(cn);
您可以使用,它将调用
std::向量v{“aaa”、“bbbb”、“ccc”};
std::多集m;
std::copy(v.begin(),v.end(),std::inserter(m,m.end());
用于(常数自动和x:m)
std::cout您可以使用,这将调用
std::向量v{“aaa”、“bbbb”、“ccc”};
std::多集m;
std::copy(v.begin(),v.end(),std::inserter(m,m.end());
用于(常数自动和x:m)
std::难道这是非法的吗?正如你所指出的,多集c
缺少push_-back
。你可以使用multiset::insert
向c
@MichaWiedenmann thx添加元素,以获得你的建设性共享。@MichaWiedenmann和thx修复我的冗长问题。正如你所指出的,这是非法的,多集c
缺失push_back
。您可以使用multiset::insert
向c
@MichaWiedenmann thx添加元素,以获得您的建设性共享。@MichaWiedenmann和thx修复了我的繁琐问题thx,以供您解释。我才恍然大悟^^我现在完全明白了。谢谢你的解释。我才恍然大悟^^我现在完全明白了。