在我的main
课程中,我有一个指针向量(vector<Corsa*> listaCorse
)
我想在我的有序向量中插入我的Corsa*
对象
所以我创建了一个迭代器,然后我通过了listaCorse.begin(), listaCorse.end(), myPointerToTheObject, &sortFunction)
已解决:我不知道为什么,但我只是包含了算法和向量,现在它已编译。
我真的不知道为什么,因为我将它们包含在myhugeclass.h文件中,但是它有效,而且还可以
谢谢大家:)
问题:sortFunction是我的Corsa&#39;中的一个静态函数。类。它超载了。
两个原型机是:
bool Corsa::cmpCorse(Corsa *a, Corsa *b)
bool Corsa::cmpCorse(Corsa &a, Corsa &b)
显然我想把第一个传递给他,因为我的是指针
的向量
但是我的编译器并不像我的代码那么多,所以它说我没有解决过载函数类型&#39;
任何人都可以帮助我吗? :)
非常感谢你
这是代码片段:
// corsa.h
class Corsa{
...
static int cmpCorsa(const Corsa& a, const Corsa& b);
static int cmpCorsa(const Corsa *a, const Corsa *b);
...
}
// myhugeclass.cpp
int MyHugeClass::addCorsa(Corsa *a){
vector<Corsa*>::iterator low = lower_bound(listaCorse.begin(), listaCorse.end(), c, &Corsa::cmpCorsa);
listaCorse.insert(low, c);
return 0;
}
谢谢:)
编辑:我犯了一个大错误,但与此错误无关。我通过了错误的功能,我应该通过static bool Corsa::sortCorsa(Corsa *a, Corsa *b)
int MyHugeClass::addCorsa(Corsa *c){
typedef bool(*Func)(const Corsa*, const Corsa*);
vector<Corsa*>::iterator low = lower_bound(listaCorse.begin(), listaCorse.end(), c, static_cast<Func>(&Corsa::sortCorsa));
listaCorse.insert(low, c);
return 0;
}
现在[Error] no matching function for call to 'lower_bound(std::vector<Corsa*>::iterator, std::vector<Corsa*>::iterator, Corsa*&, bool (*)(const Corsa*, const Corsa*))'
答案 0 :(得分:3)
您可以将其转换为正确的类型:
typedef bool(*Func)(const Corsa*, const Corsa*);
vector<Corsa*>::iterator low = lower_bound(..., static_cast<Func>(&Corsa::sortCorsa));
答案 1 :(得分:1)
这是一个使用std :: sort干净地编译的完整示例。注意typedef和cast
#include <algorithm>
#include <vector>
struct Corsa
{
static bool cmpCorsa(const Corsa& a, const Corsa& b);
static bool cmpCorsa(const Corsa *a, const Corsa *b);
};
typedef bool (*fn)(const Corsa*, const Corsa*);
int main()
{
std::vector<Corsa*> C;
std::sort(C.begin(), C.end(), static_cast<fn>(&Corsa::cmpCorsa));
}
答案 2 :(得分:0)
这是一个答案,然后可能不是......
使用已排序的向量(或deques)时,我经常发现使用std::lower_bound
并不像使用std::partial_sort
那样实用:
// assume vec is sorted
size_t const currentSize = vec.size();
vec.push_back(...); // like usual
// or
std::copy(input.begin(), input.end(), std::back_inserter(vec));
std::partial_sort(vec.begin(), vec.begin() + currentSize, vec.end() /*, comparator*/);
单次插入时效率与std::lower_bound
一样高,并且在多次插入时可能更有效。
注意:对std::sort
的调用也有效,并且通常会优化实现以利用已排序的运行,但它仍然看起来很浪费。