如何在地图中找到上一个和下一个键/值?

时间:2012-10-05 03:40:39

标签: c++ stl map vector stdmap

我有一张地图,其中包含以下数据:

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中。在此先感谢!!

1 个答案:

答案 0 :(得分:1)

如果您只是遍历地图,您将获得指向按键排序的迭代器。因此,如果您在迭代期间记住以前的迭代器,您将拥有两个连续的迭代器,您可以从中填充新的向量。

另一方面,因为你总是可以在有序映射中找到下一个和上一个键(虽然确实需要O(log n)时间),但实际上可能没有必要去解决所有问题。数据。如果您正在使用c ++ 11,您将找到std :: next和std :: prev,这将使执行这些操作变得非常容易。 (如果不是 - 为什么不呢? - 您可以根据std :: advance轻松定义它们。)