#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
bool Find(set<int> page,int number)
{
bool flag;
if(page.find(number) == page.end())
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
void OPT(vector<int> example,int size)
{
int Break = 0; //缺页次数
set<int> page;
multimap<int,int>number;
int max;
for(int i = 0; i < int(example.size()); i++)
{
if(int(page.size()) < size && Find(page,example[i]))
{
page.insert(example[i]);
Break++;
cout << Break << endl;
}
else
{
if(Find(page,example[i]))
{for(int t = 0; t < int(example.size() - i); t++ )
{
number.insert(make_pair(example[i],t));
}
for(auto it = page.begin();it != page.end();it++)
{
max = (((number.find(*it))->second) > ((number.find(*(++it)))->second)) ? ((number.find(*it))->second) : ((number.find(*(++it)))->second);
}
page.erase(example[max + i]);
page.insert(example[i]);
Break++;
number.clear();
}
}
}
}
int main()
{
vector<int> example{7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
OPT(example,3);
return 0;
}
这是我写的opt算法,但是运行时会卡住,不知道出了什么问题
根据你给的代码,可以尝试改两处试试有没有效果
1.循环的条件:将你的循环条件修改为 i < example.size()-1 可以避免最后一个元素发生越界
2.‘it’自增迭代器,有几率会造成迭代器失效;可以试着改用‘std::next()’来获取下个迭代器
```c++
for (int i = 0; i < example.size()-1; i++)
{
……
}
```c++
……
max = ((number.find(*it))->second > (number.find(*std::next(it)))->second) ? (number.find(*it))->second : (number.find(*std::next(it)))->second;
……
希望能帮到你,加油~~~