В основном, следующий код принимает в качестве входных данных n
пары, каждая из которых имеет две части, a
и b
. Я отсортировал весь вектор с помощью пользовательского компаратора, который сначала ставит эти значения с более высоким вторым значением (b)
и, если b
- это то же самое, то те, которые имеют более высокое значение a
. Вот код,Какова возможная причина ошибки сегментации в этом фрагменте кода?
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
struct mycomp
{
bool operator() (const pair<int,int> &p1, const pair<int,int> &p2)
{
if (p1.second > p2.second) // Here
return true;
else if (p1.second == p2.second && p1.first >= p2.first)
return true;
else
return false;
}
};
int main (void)
{
int i,n,a,b,foo;
cin>>n;
i = n;
vector<pair<int,int> > myvec;
while (i != 0)
{
cin>>a>>b;
myvec.push_back(make_pair(a,b));
i--;
}
int val = 0;
sort(myvec.begin(),myvec.end(),mycomp());
val = val + myvec[0].first;
int k = myvec[0].second;
foo = 1;
while (k!=0 && foo < n) // This part basically calculates the values which I have to print.
{
//k--;
val = val + myvec[foo].first;
k = k + myvec[foo].second;
k--;
foo++;
}
cout<<val<<"\n";
return 0;
}
На выполнение этого с 100 в качестве входных данных, и следующее время пар, он дает ошибку сегм. Я попытался запустить его через отладчик, и он говорит: EXC_BAD_ACCESS (code=1,address=0x101800004)
в строке, помеченной (здесь) в коде. Что я делаю неправильно в этом?
Вот ссылка для входного файла: https://www.dropbox.com/s/79ygx4qo5qc8tsl/input.txt?dl=0
является 'п> myvec.size()'? – NathanOliver
@NathanOliver, nope. Это всего лишь 100. –