使用自定义比较器排序时出现运行时错误
Runtime error in sorting with custom comparator
我正在尝试根据自定义比较器函数对字符串向量进行排序 -:
#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 );
}
我在 Windows 7 64 位上使用带有 -std=c++14
标志的 TDM-GCC 4.9.2。
每当输入向量的大小大于 16 时,我都会收到运行时错误。
我做错了什么?
您 vector<string> numsString
中的所有元素最终都具有相同的值 0
转换为字符串:
vector<int> nums( 17, 0 );
// ^
而且,在您的 comp
函数中,您没有检查数字是否相等。
在函数顶部也添加:
if (num1 == num2) return false;
我正在尝试根据自定义比较器函数对字符串向量进行排序 -:
#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 );
}
我在 Windows 7 64 位上使用带有 -std=c++14
标志的 TDM-GCC 4.9.2。
每当输入向量的大小大于 16 时,我都会收到运行时错误。
我做错了什么?
您 vector<string> numsString
中的所有元素最终都具有相同的值 0
转换为字符串:
vector<int> nums( 17, 0 );
// ^
而且,在您的 comp
函数中,您没有检查数字是否相等。
在函数顶部也添加:
if (num1 == num2) return false;