我有一个std :: list的对象。每当我添加一个对象时,我想将这些对象索引存储在列表中,所以稍后我可以将它从列表中删除。
我想在伪代码中做什么
myList.pushBack(element);
int index = myList.getIndexOfLastElement();
myList.erase(index);
出于性能原因,我无法按价值进行搜索。
澄清: 我有元素a(索引0),b(索引1),c(索引2),d(索引3)
如果删除元素b,我仍然希望能够通过2访问c。
答案 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]);