int get(int key) {
if (m.count(key) == 0) return -1;
freq[m[key].second].erase(iter[key]);
freq[m[key].second].push_back(key);
iter[key] = --freq[m[key].second].end();
if (freq[minFreq].size() == 0) ++minFreq;
return m[key].first;
}
private:
int cap, minFreq;
unordered_map<int, pair<int, int>> m;
unordered_map<int, list<int>> freq;
unordered_map<int, list<int>::iterator> iter;
我发现了一系列针对Leetcode问题的解决方案代码。让我想知道在这种情况下,最终迭代器递减实际上意味着什么,以及何时编码时使用这种格式的时机。作为C++初学者,我认为只要坚持下去,那会很棒iter[key] = freq[m[key].second].end();
但是-真的让我感到困惑。在上下文中,我们应该找到LFU缓存,并且该行应在频率列表中找到值的相应位置。
最佳答案
list<int> li;
li.push_back(1);
li.push_back(2);
li.push_back(3);
li.begin()
-指向ist元素的指针(作为引用li[0
])。li.end()
-指向null的指针(紧接在最后一个元素li[2]
之后的元素)。--li.end()
-指向最后一个元素的指针(li[2]
)。 //你的问题li.rend()
-指向第一个元素之前(li[0]
之前)的元素的指针。li.rbegin()
-指向最后一个元素的指针(li[2]
)。rbegin()
和rend()
是反向迭代器,您可以从geeksforgeeks了解更多有关它们的信息。
关于c++ - 最终迭代器递减的应用及其含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64327678/