删除结构向量中某处的项目
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
得到一个指向具有最低 LRU
的 entry
的迭代器,然后用该迭代器调用 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);
}
我有一个充满结构的向量。该结构看起来像这样:
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
得到一个指向具有最低 LRU
的 entry
的迭代器,然后用该迭代器调用 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);
}