C++ 如何从向量引用中删除元素?

C++ 如何从向量引用中删除元素?,c++,vector,C++,Vector,我正在遍历一个以向量为V参数的映射 map<SomeKey, vector<shared_ptr<SomeObject>> 我已经设法让它在不使用引用向量和使用本地副本的情况下工作,但它不会从实际地图向量中删除,只有当前范围内的复制向量 有人能举例说明我如何做到这一点吗 这不是另一篇文章的副本,因为我没有在我想从中删除元素的向量上循环。我在一张包含向量的地图上循环 矢量包含在地图中,我希望创建一个指向地图中矢量的参考矢量,并直接从地图的矢量中删除元素 map&l

我正在遍历一个以向量为V参数的映射

map<SomeKey, vector<shared_ptr<SomeObject>>
我已经设法让它在不使用引用向量和使用本地副本的情况下工作,但它不会从实际地图向量中删除,只有当前范围内的复制向量

有人能举例说明我如何做到这一点吗


这不是另一篇文章的副本,因为我没有在我想从中删除元素的向量上循环。我在一张包含向量的地图上循环

矢量包含在地图中,我希望创建一个指向地图中矢量的参考矢量,并直接从地图的矢量中删除元素

map<SomeKey, vector<shared_ptr<SomeObject>> myMap;

//loop over map
for (auto it = myMap.begin(); it != myMap.end();) {

         shared_ptr<K> keyObject = it->first;
         vector<shared_ptr<V>> * referenceList = &myMap[keyObject];

         referenceList.erase(myMap.begin() + 1);
         //this would remove it from myMap[keyObject]

}

为此,要避免复制循环中创建的变量,可以使用以下方法:

 for(auto m: mymap){
       auto & b =  mymap[m.first]; //direct access to map 

       for(auto i=b.begin(); i<b.end(); i++){ 
                If( (*i) == someobject )
                      b.erase(i); 
         } 
    }


auto
不会咬人,相信我me@TheDude似乎不是引用的向量,也不能解决我的问题。@jjmcc认为该向量是引用是无关的。@fureish什么?这是一个替换
very::long::name::thing foo=…;的建议
自动foo=。感谢您的回复。我刚刚尝试过这个,但在
erase
函数中仍然得到一个abort()。我已经用新代码更新了我的OP。实际上,谢谢,这很有效。abort()是由其他原因引起的。@jjmcc此答案中的代码已被破坏,请参阅。@HolyBlackCat这是重复的。但是,我的向量不应该有任何重复项,所以在我的情况下它似乎可以工作。@jjmcc如果确实没有重复项就可以了,但是你最好
break清除某些内容后退出循环。
    auto & clientList = connections[iterator->first];

    for (auto i = clientList.begin(); i != clientList.end(); i++) {
        if ((*i) == client) {
            clientList.erase(i);//abort() thrown here
            break;
        }
    }
 for(auto m: mymap){
       auto & b =  mymap[m.first]; //direct access to map 

       for(auto i=b.begin(); i<b.end(); i++){ 
                If( (*i) == someobject )
                      b.erase(i); 
         } 
    }
If( (*i) == someobject )
while( ((*i) == some object) && (i != b.end()) )