std :: list按索引删除元素

时间:2015-12-06 11:12:30

标签: c++ list c++11 indexing std

我有一个std :: list的对象。每当我添加一个对象时,我想将这些对象索引存储在列表中,所以稍后我可以将它从列表中删除。

我想在伪代码中做什么

myList.pushBack(element);
int index = myList.getIndexOfLastElement();

myList.erase(index);

出于性能原因,我无法按价值进行搜索。

澄清: 我有元素a(索引0),b(索引1),c(索引2),d(索引3)

如果删除元素b,我仍然希望能够通过2访问c。

2 个答案:

答案 0 :(得分:5)

我建议使用std::list::iterator而不是整数索引。 std::list::erase()不会使迭代器失效。

auto index = myList.insert(myList.end(), element);

myList.erase(index);

答案 1 :(得分:0)

您需要map index s到该元素的迭代器。类似的东西:

auto pos = myList.cbegin();
map<int, decltype(pos)> m;

// bump pos for every myList.pushBack(element);
int index = myList.getIndexOfLastElement();
m[index] = pos;

// then you can erase with
myList.erase(m[index]);