C++ C++;:存储旧int句柄和新int句柄之间的映射
我有一个包含struct元素的数组。我需要从数组中删除一些元素,并存储旧值之间的映射还有新的 即,fill std::map,其键是数组中元素的旧索引,其值是数组中的新索引。(因为当如果从矢量中删除,则该矢量将向左移动。) 我将用一个例子说明我需要什么:C++ C++;:存储旧int句柄和新int句柄之间的映射,c++,arrays,sorting,dictionary,mapping,C++,Arrays,Sorting,Dictionary,Mapping,我有一个包含struct元素的数组。我需要从数组中删除一些元素,并存储旧值之间的映射还有新的 即,fill std::map,其键是数组中元素的旧索引,其值是数组中的新索引。(因为当如果从矢量中删除,则该矢量将向左移动。) 我将用一个例子说明我需要什么: 0 1 2 3 4 5 6 arr0 = {a, b, c, d, e, f, g} 0 1 2 3 4 5 arr1 = {a, b, c, e, f, g} //after de
0 1 2 3 4 5 6
arr0 = {a, b, c, d, e, f, g}
0 1 2 3 4 5
arr1 = {a, b, c, e, f, g} //after delete d
map[0]=0 // a
map[1]=1 // b
map[2]=2 // c
map[4]=3 // e
map[5]=4 // f
map[6]=5 // g
帮我实现这个。
我有一个来自以下结构的数组:
struct HalfEdgeHandle { int64_t index = -1; };
std::vector<HalfEdgeHandle> halfEdges = {};
struct HalfEdgeHandle{int64_t index=-1;};
std::向量半边={};
我需要删除包含半边[I]的数组元素。索引==-1只要我理解了您的问题,这应该是解决方案:
struct HalfEdgeHandle{};
std::向量半边={};
//这里将数据存储到向量中
地图;
std::向量拷贝;
int j=0;
对于(int i=0;i
copy
应该是std::vector
,不包含任何具有索引==-1
的元素<代码>地图将如您所述
让我指出两件事:
- 考虑将
和映射
变量名更改为代码中更有意义的名称复制
- 考虑更改存储以前索引和新索引的方式。我会交换键值对,这样就有了连续索引。如果您这样做,您可以使用
而不是std::vector
(如果不是强制性的,我通常会避免使用std::map
)std::map