2012-10-25 63 views
0

我試圖理清C++排序不使用自定義功能

std::vector< std::vector< std::string> > perm; 

我試圖使用std::sort從算法頭

我把它叫做與

std::sort(perm.begin(), perm.end(), sortPerms); 

這是我的排序功能:

bool sortPerms (const std::vector<std::string> &i, const std::vector<std::string> &j) { 
    for(unsigned int x = 0; x < i.size(); x++) { 
    if(i[x] != j[x]) 
     return false; 
    } 
    //both are equal 
    return true; 
} 

排序的目的是調用std :: unique來獲取具有唯一值的向量。 當我在cygwin中使用gcc進行編譯時,我沒有遇到任何錯誤,但我重複了一遍,當我用visual studio 2010進行編譯時,出現運算符<未定義的錯誤。 我開始嘗試使用自己的排序功能,而不是我已經定義的排序功能。

我不知道如何解決這個問題,有什麼建議嗎?

其他詳細信息: 確保所有載體的大小相同。 它的目的是一個向量的每個字符串的原始矢量的排列。 每個字符串都是一個命令,我正在尋找這些命令可以混洗的所有不同方式。所以我需要去掉重複的東西。

+0

你能指出你有錯誤的那一行嗎? – Grzegorz

+4

你如何期望根據不平等的概念來排序**? –

+0

它是中的一個斷言,表明operator <是未定義的。我不知道爲什麼這是一個問題,如果我提供自己的比較器 – clark

回答

3

您的排序功能應返回時,a < b,而不是a != b

另外,默認情況下,std::vector<>應該已經支持通過operator<進行字典對比,它應該按照您的要求進行操作(比較每個元素和第一個用於比較的非等價元素)。請參閱http://en.cppreference.com/w/cpp/container/vector/operator_cmp

您當前的sortPerms函數看起來像是要傳遞給std::unique,但它的行爲與用於std::sort的謂詞不同。

+0

哦,不是媽 –

+0

甜,感謝 我不知道,如果載體將有一個這樣的功能,謝謝 另外,我不認爲比較實際命令的a 這樣的組合,但我知道這通常是如何完成。 再次感謝 – clark