我已经创建了一个LRU缓存的模拟,其定义如下:
unordered_map<string, std::pair<T, std::list<string>::iterator>> mycache;
意思是,我在缓存类中还有一个名为list<string> mylist;
使用LRU算法的缓存优先级位于list<string>
上。
我需要使用lambda函数创建一个foreach
函数,以根据优先级(它们在T objects
中的顺序,打印出缓存中的项目(mylist
)< / strong>)。
我确实设法打印出地图上的项目:
template class <p>
void foreach(p func) {
for (typename std::unordered_map<string, pair<T, list<string>::iterator>>::iterator it = mycache.begin();
it != mycache.end(); ++it) {
func(it->second.first);
}
}
当我尝试在列表中进行操作时:
void foreach(const function<void(T&)> func) {
for (auto key:priorityQueue) {
pair<T, list<string>::iterator> mypair = mycache.find(key);
T obj = mypair.first;
func(obj);
}
}
无法编译,并表示mypair
存在问题。
错误如下:
error: conversion from ‘std::unordered_map<std::__cxx11::basic_string<char>, std::pair<Student, std::_List_iterator<std::__cxx11::basic_string<char> > >, std::hash<std::__cxx11::basic_string<char> >, std::equal_to<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::pair<Student, std::_List_iterator<std::__cxx11::basic_string<char> > > > > >::iterator {aka std::__detail::_Node_iterator<std::pair<const std::__cxx11::basic_string<char>, std::pair<Student, std::_List_iterator<std::__cxx11::basic_string<char> > > >, false, true>}’ to non-scalar type ‘std::pair<Student, std::_List_iterator<std::__cxx11::basic_string<char> > >’ requested
pair<T, list<string>::iterator> mypair = mycache.find(key);
我的错误在哪里?