如何从地图中删除矢量对象
How to remove the vector object from the map
我有一张地图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
如果您想访问实际的数据项,则需要获取对该项目的引用。相反,您当前的代码获取向量的副本。
因此这一行:
std::vector<Data> list = it->second;
应该是:
std::vector<Data>& list = it->second;
感谢抽空。我尝试了以下代码,它对我有用。
for ( itr = myMap[key].begin(); itr != myMap[key].end(); ++itr)
{
if (itr->x == 1)
{
myMap[key].erase(itr);
break;
}
}
我有一张地图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
如果您想访问实际的数据项,则需要获取对该项目的引用。相反,您当前的代码获取向量的副本。
因此这一行:
std::vector<Data> list = it->second;
应该是:
std::vector<Data>& list = it->second;
感谢抽空。我尝试了以下代码,它对我有用。
for ( itr = myMap[key].begin(); itr != myMap[key].end(); ++itr)
{
if (itr->x == 1)
{
myMap[key].erase(itr);
break;
}
}