我有一個我想按字母順序排列的向量。我已經成功地按字母順序排序了一個索引值,但是當我這樣做時,它只會改變索引的順序而不是整個向量。我如何才能將訂單更改應用於整個向量? 這是我當前的代碼我運行:按索引值按字母順序排序向量
std::sort (myvector[2].begin(), myvector[2].end(), compare);
bool icompare_char(char c1, char c2)
{
return std::toupper(c1) < std::toupper(c2);
}
bool compare(std::string const& s1, std::string const& s2)
{
if (s1.length() > s2.length())
return true;
if (s1.length() < s2.length())
return false;
return std::lexicographical_compare(s1.begin(), s1.end(),
s2.begin(), s2.end(),
icompare_char);
}
我對這個矢量一般結構是向量[行] [列]其中:
| One | Two | Three |
| 1 | 2 | 3 |
| b | a | c |
例如,如果我有一個向量:
myvector[0][0] = 'One' AND myvector[2][0]='b'
myvector[0][1] = 'Two' AND myvector[2][1]='a'
myvector[0][2] = 'Three' AND myvector[2][2]='c'
| One | Two | Three |
| 1 | 2 | 3 |
| b | a | c |
我整理我得到它:
myvector[0][0] = 'One' AND myvector[2][0]='a'
myvector[0][1] = 'Two' AND myvector[2][1]='b'
myvector[0][2] = 'Three' AND myvector[2][2]='c'
| One | Two | Three |
| 1 | 2 | 3 |
| a | b | c |
,而不是我想要的:
myvector[0][0] = 'Two' AND myvector[2][0]='a'
myvector[0][1] = 'One' AND myvector[2][1]='b'
myvector[0][2] = 'Three' AND myvector[2][2]='c'
| Two | One | Three |
| 2 | 1 | 3 |
| a | b | c |
我環顧四周,一個很好的辦法,但無法找到任何工作......我想是這樣的:
std::sort (myvector.begin(), myvector.end(), compare);
然後處理的分類我的比較函數中的第三個索引,因此整個矢量將被編輯......但是當我傳遞了我的數據時,我只是改變了函數中的順序,仍然沒有更改頂層或出現錯誤。任何意見或幫助將不勝感激。先謝謝你。
你正在離開'myvector [1] [...]'在我有什麼/我想要什麼描述。有什麼理由呢? – WhozCraig
如果你想按第二個索引進行排序,那麼''2''應該出現在*'compare'中。這將對行進行排序,而不是像您所示的列,所以您應該調換數據。 –
@whozCraig:我只是忽略了1個索引,以減少你們閱讀的次數。我只是用帶索引的矢量來描述基本結構。 –