구조체 목록, 반복기의 쌍 구조체 및 double 값을 정렬하려고합니다.std :: sort를 사용하여 구조체 쌍으로 목록 정렬
위 내용이 저의 시도입니다. 내 구조체는
template<class Iterator>
struct Pair{
double distance;
Iterator iterator; };
입니다. 내 정렬 기능은 다음과 같습니다.
template<class SetIterator>
static bool MyDataSortPredicate(const Pair<SetIterator>& lhs, const Pair<SetIterator>& rhs){
return lhs.distance < rhs.distance;
}
구조체 값 목록 만들기. 그것은 distance_pair이며, 그 타입을 주목하라.
error: no matching function for call to 'sort'
std::sort(distance_pair.begin(),distance_pair.end(),MyDataSortPredicate);
^~~~~~~~~
main_test.cpp:51:2: note: in instantiation of function template specialization
'createSortedPointDistancePairs<std::__1::__wrap_iter<Vector *> >' requested here
createSortedPointDistancePairs(vector_contains.begin(), vector_contains.end(), query);
:
template<class SetIterator>
std::vector<Pair<SetIterator> > createSortedPointDistancePairs(
SetIterator begin, SetIterator end,Vector const& query){
std::vector<double> it(std::distance(begin,end));
std::vector<double>::iterator iter;
std::vector<Pair<SetIterator> > distance_pair(std::distance(begin,end)); //to make space
computeDistances(begin, end, query, it.begin());
SetIterator pos = begin;
int i = 0;
for(iter = it.begin(); iter!=it.end();++iter,i++){
if (pos!=end){
Pair<SetIterator> set;
set.distance = *iter;
set.iterator = pos;
distance_pair[i] = set;
}
++pos;
}
지금 내 attemt 거리의 순서가 내 비교 기능 MyDataSortPredicate를 사용하여 값을 accending입니다되는 분류 구조체 목록,
std::sort(distance_pair.begin(),distance_pair.end(),MyDataSortPredicate);
오류가 만들려면
그리고 더 많은 텍스트.
내가 문제 템플릿 매개 변수 유형을 읽는 데 문제가 있습니다. 일부 typedef를 추가하고 가능하면 소스를 다시 포맷하여 의도를 명확히 할 수 있습니까? – rubicks