在 std::map 中重新排列键
Rearrange keys in std::map
我有一张看起来像这样的地图:
0, 1234
1, 5678
2, 9012
现在,例如,我删除了键 1 的条目,因此地图如下所示:
0, 1234
2, 9012
现在我想重新排列键,使地图看起来像这样:
0, 1234
1, 9012
知道怎么做吗?
使用向量
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int j = 0;
std::vector<int> v = {100, 200, 300};
std::for_each(v.begin(), v.end(), [&j](auto const& p) {
std::cout << "index = " << j++ << " value = " << p << std::endl;
});
/* Delete item at index = 1 */
v.erase(v.begin() + 1);
j = 0;
std::for_each(v.begin(), v.end(), [&j](auto const& p) {
std::cout << "index = " << j++ << " value = " << p << std::endl;
});
}
输出
index = 0 value = 100
index = 1 value = 200
index = 2 value = 300
index = 0 value = 100
index = 1 value = 300
你想要的听起来很不合逻辑。键是唯一的,用于查找值(非常快(。现在你想改变密钥,这很奇怪。您可能需要平面类型的列表类型。
您应该查看std::list
或std::vector
。删除项目时,索引会自动"更新"。
您只能通过擦除前一个元素并使用新键重新插入它来执行此操作
相关文章:
- 使用std::multimap迭代器创建std::list
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- 在 std::map 中重新排列键
- 使用 stl 排列 std::vector 元素的最短解决方案
- 为什么"std::unordered_map""speak like the Yoda" - 重新排列元素?
- 用std::move执行就地排列
- 为什么 std::sort 不按字母顺序排列字符串数组?