我有一张地图,其中包含以下数据:
id prev abundance thing
1573 -1 0 book
1864 1573 39 beds
2075 1864 41 tray
1760 2075 46 cups
地图是:
map<int id, Abund*> oldMap;
struct Abund
{
int prev;
int abundance;
string thing;
}
我现在需要创建一个新的地图,如下所示:
id2 prev2 prevAbun next2 nextAbun thing2
1573 -1 1864 39 book
1864 1573 0 2075 41 beds
2075 1864 39 1760 46 tray
1760 2075 41 cups
地图1中的上一行和下一行应该成为newMap中的列 到目前为止,我已经创建了一个新的地图和新结构:
struct NewAbund
{
vector<int> prev2;
vector<int> prevAbun;
vector<int> next2;
vector<int> nextAbun;
string thing2;
}
map<int id2, NewAbund*> newMap;
现在我不知道逻辑如何用于从oldMap获取前一行并将其作为值放在newMap中。在此先感谢!!
答案 0 :(得分:1)
如果您只是遍历地图,您将获得指向按键排序的迭代器。因此,如果您在迭代期间记住以前的迭代器,您将拥有两个连续的迭代器,您可以从中填充新的向量。
另一方面,因为你总是可以在有序映射中找到下一个和上一个键(虽然确实需要O(log n)时间),但实际上可能没有必要去解决所有问题。数据。如果您正在使用c ++ 11,您将找到std :: next和std :: prev,这将使执行这些操作变得非常容易。 (如果不是 - 为什么不呢? - 您可以根据std :: advance轻松定义它们。)