如何在映射中找到上一个和下一个键/值

How do I find previous and next key/value in a map?

本文关键字:下一个 上一个 映射      更新时间:2023-10-16

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

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 中。提前感谢!!

如果您只是遍历地图,您将获得迭代器,这些迭代器按键顺序指向配对。因此,如果您在迭代期间还记得上一个迭代器,您将有两个连续的迭代器,您可以从中填充新向量。

另一方面,由于您始终可以在有序映射中找到下一个和上一个键(尽管确实需要 O(log n) 时间),因此可能真的没有必要费尽心思对数据进行非规范化。如果你使用的是 c++11,你会发现 std::next 和 std::p rev,这将使执行这些操作变得非常容易。(如果没有 - 为什么不呢?- 你可以很容易地用std::advance来定义它们。