【问题标题】:adding and erasing elements from container, without shrinking it从容器中添加和删除元素,而不收缩它
【发布时间】:2020-04-07 20:10:26
【问题描述】:

如何制作一个可以添加元素的容器,例如在开头添加 1 2 3,然后有几个空格,然后是 4、5、6。所以它看起来像这样:

add(1, 0) -> add one on position 0
add(2, 1)
add(3, 2)
add(4, 5)
add(5, 6)
print() --> 0-2: 1,2,3 4-5: 4,5
erase(2, 0) -> (length, position)
print() --> 2: 3 4-5: 4,5

目的是稍后在缺失的位置添加东西。

tyy

【问题讨论】:

  • A std::map<int, int> 已经做了你想要的,界面不同,但你可以根据需要包装它。如果您的差距很小,那么std::vector<std::optional<int>> 实现可能会更有效。

标签: c++ containers add erase


【解决方案1】:

您可以为此使用std::map/std::unordered_map。看起来像

std::unordered_map<int, int> data;
data[0] = 1;
data[1] = 2;
data[2] = 3;
data[5] = 4;
data[6] = 5;

//print() --> 1, 2, 3, 4, 5, 6

data.erase(data.begin(), std::next(data.begin(), 2)) // erase first 2 elements

//print() --> 3, 4, 5, 6

【讨论】:

  • 请注意,例如删除前四个元素将删除键 0、1、2 和 5
  • data.erase(data.begin(), data.begin() + 2); 无法编译。请改用data.erase (data.begin(), std::next (data.begin(), 2));
  • @PaulSanders 不错。固定。
猜你喜欢
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2012-12-28
相关资源
最近更新 更多