删除结构向量中某处的项目

Deleting an item somewhere in a vector of structs

我有一个充满结构的向量。该结构看起来像这样:

struct entry{
    int something
    int something2;
    int LRU; // least recently used
};

我想做的是先在vector中找到LRU最低的struct。并尝试通过以下方式做到这一点:

least = vector[0].LRU; 
for (entry &e : vector ) {
    if (e.LRU < least)
    least = e.LRU; 
}

这行得通吗?我现在如何删除 TLB 中的正确结构?

提前致谢!

一种方法是使用 std::nth_element 确保具有最低 LRU 的元素在 vector 中排在最后。然后,您可以 resize() vector 删除最后一个元素。

示例:

if(not vector.empty()) {
    std::nth_element(vector.begin(), std::prev(vector.end()), vector.end(),
        [](auto&& lhs, auto&& rhs) {
            return rhs.LRU < lhs.LRU;
        });
    vector.resize(vector.size() - 1);
}

另一种方法是使用 std::min_element 得到一个指向具有最低 LRUentry 的迭代器,然后用该迭代器调用 vector.erase()

if(not vector.empty()) {
    auto it = std::min_element(vector.begin(), vector.end(),
        [](auto&& lhs, auto&& rhs) {
            return lhs.LRU < rhs.LRU;
        });
    vector.erase(it);
}