【问题标题】:How to remove the vector object from the map如何从地图中删除矢量对象
【发布时间】:2020-10-26 17:27:22
【问题描述】:

我有一张地图std::map<int, std::vector<Data>>myMap,我的结构定义如下。

        struct Data
        {
         int x;
         int z;
         int y;
        };

在 myMap 中键是 int,值是结构向量

我得到了 x 和键值。 我想从向量对象的键和 x 值匹配的向量中删除对象

我已经尝试给出结构的所有 x、y、z 值:

myMap[123].erase(std::remove(myMap[123].begin(), myMap[123].end(), {1,2,3}), myMap[priority].end());

但是这里只会给出X值。

我曾尝试编写如下函数:

void deleteByx(int x)
{
        for (std::map<int,std::vector<Data>>::iterator it = myMap.begin(); it != myMap.end(); it++)
        {
            std::vector<Data> list = it->second;
            for (std::vector<Data>::iterator vec_it = list.begin(); vec_it != list.end(); vec_it++)

            for(int index = 0;index < list.size();index++)
            {
                if (vec_it->x == x)
                {
                    list.erase(vec_it);
                }
            }


        }
}

但这里函数从局部向量list中删除元素

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我试过 myMap[123].erase(std::remove(myMap[123].begin(), myMap[123].end(), {1,2,3}), myMap[优先级].end());但它给出的错误是没有匹配函数调用'remove(std::vector::iterator, std::vector::iterator,)。但是如果尝试对值为 int 向量的地图使用 std::remove 它对我有用
  • 那有什么问题?如果您包含 minimal reproducible example 并解释它是如何无法按预期工作的,那么给出答案会容易得多
  • 我也没有给出结构的所有变量,只给出了 x 值
  • 在此处编辑您的问题:stackoverflow.com/posts/62758595/edit cmets 中的代码不可读

标签: c++ stdvector stdmap


【解决方案1】:

如果您想访问实际的数据项,则需要获取对该项的引用。相反,您当前的代码会获得向量的副本。

因此这一行:

std::vector&lt;Data&gt; list = it-&gt;second;

应该是:

std::vector&lt;Data&gt;&amp; list = it-&gt;second;

【讨论】:

    【解决方案2】:

    感谢您的时间。我已尝试使用以下代码,它对我有用。

    for ( itr = myMap[key].begin(); itr != myMap[key].end(); ++itr)
        {
            if (itr->x == 1)
            {
                myMap[key].erase(itr);
                break;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多