使用lambda函数时创建一个foreach函数

时间:2019-11-27 23:40:21

标签: c++ lambda lru

我已经创建了一个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);

我的错误在哪里?

0 个答案:

没有答案