Я пытаюсь сортировать вектор строк на основе пользовательской функции сравнения -:Ошибка выполнения сортировки с пользовательским компаратором
#include<bits/stdc++.h>
using namespace std;
template<typename T>
std::string ToString(const T& obj)
{
std::stringstream ss;
ss << obj;
return ss.str();
}
bool comp(string num1, string num2)
{
bool swapped = false;
if (num2.size() > num1.size())
{
swap(num1, num2);
swapped = true;
}
size_t i = 0;
size_t j = 0;
while (i < num1.size() && j < num2.size())
{
if (num1[i] > num2[j])
{
return !swapped;
}
else if (num1[i] < num2[j])
{
return swapped;
}
i++;
j++;
}
j = 0;
while (i < num1.size() && j < num1.size())
{
if (num1[i] > num1[j])
{
return !swapped;
}
else if (num1[i] < num1[j])
{
return swapped;
}
i++;
j++;
}
return true;
}
string largestNumber(vector<int>& nums)
{
vector<string> numsString(nums.size());
for (size_t i = 0; i < numsString.size(); i++)
{
numsString[i] = ToString(nums[i]);
}
string result;
sort(numsString.begin(), numsString.end(), comp);
for (size_t i = 0; i < numsString.size(); i++)
{
result += numsString[i];
}
return result;
}
int main()
{
// Works okay if the size of vector is less than 17
vector<int> nums(17, 0);
largestNumber(nums);
}
Я использую TDM-GCC 4.9.2 с -std=c++14
флагом на Windows-64 -немного.
Я получаю ошибку времени выполнения каждый раз, когда размер входного вектора больше 16.
Что я делаю неправильно?
Не знаю. Всякий раз, когда я запускаю программу, появляется диалоговое окно с надписью «*». Проблема привела к тому, что программа перестала работать правильно. Пожалуйста, закройте программу. '* –
Нет. Я раньше не использовал, и я не знаю, как ее использовать. –
Определение ToString может быть полезно. – lisyarus