如何在映射中找到上一个和下一个键/值
How do I find previous and next key/value in a map?
>我有一张地图,其中包含以下数据:
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来定义它们。
相关文章:
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- WINUSB_ControlTransfer只能在设备上可用的两个接口中的一个上使用,而不能在另一个接口上使用
- 类模板上一个特定函数的未解析外部符号
- 错误:"int pow(double,int)"与上一个声明int pov(double a,int
- 如何查看提升集中<cpp_int>的下一个和上一个元素
- 我想知道我将如何实现 + 运算符重载.我已经从我上一个问题中计算出 += 运算符重载
- 如何删除上一个节点?
- 插入指针数组会删除上一个结果
- 助推器使用上一个DMATRIX后,XGDMATRIXCREATEFROMMAT失败
- 尝试指向链表中的上一个节点
- 如何在C++中找到上一个星期一的日期
- 与上一个线程具有相同ID的线程同步
- 如何检测和与Linux下的另一个过程进行通信
- 是否可以在同一设备缓冲区上一个接一个地调用 OpenCL 内核?
- 获取线跳到下一个 cin 并跳过上一个 cin
- 如何在映射中找到上一个和下一个键/值
- 如何找到最近的下一个/上一个双精度值(给定数字的numeric_limits::epsilon)
- 在找到模式后检索上一个和下一个模式
- 套接字描述符在特定条件下从另一个线程关闭,当同一套接字上的accept()调用在Linux中进行时