std::sort()
での使用方法については、たくさんの例がありますstd::vector
。私の特定の宿題では、を使用することは許可されていないため、代わりにカスタムオブジェクトの動的配列でstd::vector
使用したいと思います。std::sort()
そのようです:
int numberOfRoads = 100000;
Road* roads = new Road[numberOfRoads];
// Assume the comparator is defined correctly (<- this was the problem)
std::sort(roads, roads + numberOfRoads, SortRoadsComparator);
そして、これが私が受け取る主なコンパイラエラーです:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(3781): error C2664: 'int (const void *,const void *)' : cannot convert parameter 1 from 'Road' to 'const void *'
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
このエラーは約20回発生します。正確には何をする必要がありますか?
SortRoadsComparator()
int SortRoadsComparator(void const *v1, void const *v2)
{
Road *a = (Road *)v1;
Road *b = (Road *)v2;
if (a->Length > b->Length)
return 1;
else if (b->Length > a->Length)
return -1;
else
{
// Non-determinism case
if (a->Length == b->Length)
{
if ( (min(a->CityA, a->CityB) < min(b->CityA, b->CityB)) ||
(
(min(a->CityA, a->CityB) == min(b->CityA, b->CityB)) && max(a->CityA, a->CityB) < max(b->CityA, b->CityB)
)
)
{
return -1;
}
else
{
return 1;
}
}
else
{
// Not expecting this
}
}
}
ビルズのコメントで解決。