#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? –