使用 std::sort 对具有结构对的列表进行排序
Sorting a list with struct pair using 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的,请注意它的类型。
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;
}
现在,我倾向于制作一个排序结构列表,其中距离的顺序在值中相加,使用我的比较函数MyDataSortPredicate,
std::sort(distance_pair.begin(),distance_pair.end(),MyDataSortPredicate);
错误是:
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);
还有更多的文字。
MyDataSortPredicate
不是具体的对象或函数。它是一个函数模板。因此,它不能作为参数传递给函数。您需要使用模板参数实例化它。
std::sort(distance_pair.begin(),distance_pair.end(),MyDataSortPredicate<SomeType>);
如果你不想显式地为比较器提供类型,你可以创建一个多孔函数对象,如std::less<void>
:
struct MyDataSortPredicate
{
template <typename SetIterator>
bool operator(const Pair<SetIterator>& lhs, const Pair<SetIterator>& rhs)
{
return lhs.distance < rhs.distance;
}
};
相关文章:
- 试图在c++中对数字列表进行排序
- 在STL - C++中按成绩对学生列表进行排序?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如何按键对 std::对列表进行排序?
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 使用自定义比较函数在类内进行列表排序
- 列表::排序更改值C
- 对于列表排序,有没有办法使用相同的参数让多个运算符重载?
- 在 c++ 中将数字从列表排序到数组中的气泡排序问题
- 运算符<用于列表排序
- C++列表排序功能
- C++ STL 算法(列表排序)OpenMP/多线程实现
- 列表排序不正确
- 列表排序和结构体向量排序之间的性能差距.c++
- 对抽象数据类型的stl::列表排序
- C++std列表排序使用自定义比较器,该比较器依赖于对象实例的成员变量