为什么我可以在地图中使用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);
    
  • 然而,在第二个练习中,假设c是字符串的多集,v是字符串的向量,is
    copy(v.begin(),v.end(),back_inserter(c))合法还是非法

  • 当我使用它时,我得到了以下错误:

    错误:“class std::multiset>”没有名为“push\u back”的成员`


    我所知道的是,
    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
    s
    mapped\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
    s
    map\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,以供您解释。我才恍然大悟^^我现在完全明白了。谢谢你的解释。我才恍然大悟^^我现在完全明白了。