繁体   English   中英

以地图为参数的功能不起作用

Functions with a map as parameter not working

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

由于某种原因,我的程序中以map作为参数的所有函数均无法正常工作。 此函数是调用所有函数的函数(pageAndTimestamp是一个结构btw):

void fifo(int framesize, int numref, int* pagestream)
{
  double hit = 0, size = numref;

  map<int, pageAndTimestamp> frames = frameMaker(framesize);

  for (int time = 0; time < numref; time++)
  {
    if (pageLoaded(pagestream[time], frames))
    {
      hit++;
      output(time, pagestream[time], size, hit, frames);
    }
    else
    {
      int loc = findPageToReplace(frames);
      replacePage(loc, pagestream[time], time, frames);
      output(time, pagestream[time], size, hit, frames);
    }
  }
}

这些功能无法正常工作:

bool pageLoaded(int page, map<int, pageAndTimestamp> m)
{
  for (const auto& it : m)
  {
    if (it.second.a[0] == page)
    return true;
  }
  return false;
} 

int findPageToReplace(map<int, pageAndTimestamp> m)
{
  int timestamp = INT_MAX;
  int replaceLoc = 0;
  for (const auto& it : m)
  {
    if (it.second.a[1] == -1)
    return it.first;
    else
    {
      if (it.second.a[1] < timestamp)
      {
        timestamp = it.second.a[1];
        replaceLoc = it.first;
      }
    }
  }
  return replaceLoc;
}

void replacePage(int loc, int page, int time, map<int, pageAndTimestamp> m)
{
  m.at(loc).a[0] = page;
  m.at(loc).a[1] = time;
} 

void output(int t, int p, double s, double h, map<int, pageAndTimestamp> m)
{
  cout << "Time: " << t << endl << "Page: " << p << endl;
  for(const auto& it : m)
    cout << "Frame" << it.first << ": " << it.second.a[0] << endl;
  cout << "Hit ratio: " << h << " / " << s << " (" << h / s << ")" << endl 
 << endl << endl;
}

当我在Visual Studio 2017调试器中运行程序时,进入上述任何功能时,调试器会将我带到地图标准标头中的该功能标头:

map(const map& _Right)
    : _Mybase(_Right, _Alnode_traits::select_on_container_copy_construction(_Right._Getal()))
    {   // construct map by copying _Right
    }

我不知道问题是什么,或者为什么调试器将我带到此函数头。 我该如何解决?

1 个回复

例如,函数replacePage定义为:

void replacePage(int loc, int page, int time, map<int, pageAndTimestamp> m)

此函数将映射作为 ,而不是引用或指针。 因此,当您按以下方式调用它时:

replacePage(loc, pagestream[time], time, frames);

然后将地图frames 复制到函数中的变量m中。 例如,这就是调试器将您带到映射的副本构造器的原因。

此外,这意味着replacePage代码

  m.at(loc).a[0] = page;
  m.at(loc).a[1] = time;

正在更改frames 副本 ,而不是frames本身。

您可能需要带有以下形式的签名的函数:

bool pageLoaded(int page, const map<int, pageAndTimestamp>& m)
int findPageToReplace(const map<int, pageAndTimestamp>& m)
void replacePage(int loc, int page, int time, map<int, pageAndTimestamp>& m)
void output(int t, int p, double s, double h, const map<int, pageAndTimestamp>& m)

其中大多数函数采用常量引用,而replacePage需要(非常量)引用。

2 数组函数映射和 foreach 不起作用

我试图在 react native 中迭代一组对象,但由于某种原因我无法做到。 这就是我的阵列的样子。 这是数组 当我尝试使用arr.map((item,key) =&gt; console.log(item.id))映射此数组时,调试器中没有任何反应。 有什么帮助吗? Edit2:这是完整的 ...

3 使用文件和目录的函数的惯用参数类型

如果我正在编写“惯用”PowerShell,我将使用哪些参数类型来处理与文件或目录一起使用的函数? 例如,我创建了一个包含此功能的模块: 麻烦的是,以下不起作用: PS&gt;Set-Bookmark -Id Code -Path C:\Code Set-Bookmark : C ...

4 Python:列表和地图功能无法正常工作

我在处理给定数据时遇到了一些麻烦。 任务很简单,我需要做的就是将第一个最大元素与列表中的最后一个交换。 输入数据只是一个数字序列,由空格分隔。 如果我使用 map 将每个数字从 str 转换为 int 它会失败测试,​​但错误代码没有显示,所以我不知道如何解决这个问题。 该代码是在 Python ...

2018-12-31 17:20:08 1 86   python
7 网址中的谷歌地图缩放参数不起作用

为什么 google map z (zoom) 参数在 url 中不起作用? 我已经搜索过了,所以我在谷歌地图 url 中发送缩放参数的解决方案很少,但基于处理 url 中缩放级别的旧帖子 (stackoverflow),似乎此功能不再起作用。 我使用了以下 z 参数,但它不起作用: http ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM