#include <algorithm>
bool comparisonFunc(char* c1, char* c2)
{
return strcmp(c1, c2) ? 0 : 1;
}
vector<char*> myVec;
vector<char*>::iterator itr;
sort(myVec.begin(), myVec.end(), comparisonFunc)
这是正确的还是有更好的方法来做到这一点?如何排序矢量<char*>?
#include <algorithm>
bool comparisonFunc(char* c1, char* c2)
{
return strcmp(c1, c2) ? 0 : 1;
}
vector<char*> myVec;
vector<char*>::iterator itr;
sort(myVec.begin(), myVec.end(), comparisonFunc)
这是正确的还是有更好的方法来做到这一点?如何排序矢量<char*>?
std::sort
需要一个“小于”谓词。你应该实现你comparisonFunc()
这样的:
bool comparisonFunc(const char *c1, const char *c2)
{
return strcmp(c1, c2) < 0;
}
(注意const
秒;他们是非常重要的。)
您当前的执行不可能工作,因为你刚刚返回,如果这两个值相等或不。这些信息不足以进行排序 - 您需要知道哪一个较小,哪一个更大(当然,除非值相等)。
为什么const在这里很重要? – user1002288
std :: sort当它只想知道哪一个更小时,绝不会让你修改容器的内容。 – hrnt
bool compareFunc(const char * c1,const char * c2)const {}? – user1002288
我更多的时候想指针的矢量排序,以比只是普通的C字符串记录...
template<>
struct std::less<const foo*>
{
bool operator()(const foo* lhs, const foo* rhs) const
{
return strcmp(lhs->key, rhs->key);
}
};
这重新定义富的比较*使得默认的比较中的排序工作。对我而言,这种风格感觉更具说明性,另一种更具程序性。如果您需要多个订单,则默认情况下的使用是有问题的;如果你想确保所有有序的foo *集合都是相同的顺序,那就很好。
std::vector<foo*> db;
std::sort(db.begin(), db.end());
'itr'似乎未被使用。和'strcmp(...)? 0:1'会更习惯性地写成'!strcmp(...)'。但我不知道你的实际问题的答案。 – zwol
@ user1002288为什么不使用'std :: sort(myVec.begin(),myVec.end(),:: strcmp);'directlt? –