2017-08-17 110 views
0

我有一個字符串隊列的程序。要求已更改,現在輸出必須按字母順序排列。我想隊列排序,但我得到的錯誤「沒有匹配的函數調用'begin(std::queue<std::cxx11__basic::string<char>>&)''end(std::queue<std::cxx11__basic::string<char>>&)'字符串排序隊列

queue<std::string> lines = doWork(); 
std::sort(std::begin(lines), std::end(lines)); 

什麼是排序它的最好方法是什麼?難道是更好地從隊列更改爲載體或一些其他結構?唯一需要的操作是添加結束並從結尾移除

另外我使用的是Netbeans,它只顯示編譯錯誤信息,當我將鼠標懸停在紅色的x上時,我該如何複製並粘貼消息?

編輯:我現在明白隊列不能排序。那麼是什麼最好的數據結構使用?它只需要從一端添加,按照直線排列(從頭到尾)並進行排序?

+1

隊列是一個FIFO,你不能排序它。 – 2017-08-17 10:32:12

+0

'排序隊列'是一個矛盾的詞彙。你可以有一個'優先級隊列',它自己命令*,但是排序已經存在的隊列違反了這兩個概念。 – EJP

+0

@EJP這個問題使得它似乎成爲可能https://stackoverflow.com/questions/13280726/sorting-a-queue-of-structs – northerner

回答

0

std::queue沒有beginend,定義總是先進先出。

選擇std::deque而不是,它可以排序,而不像std::vector,有pop_front,並提供更好的FIFO操作性能。

+0

有沒有可以參考比較不同數據結構上的操作性能的地方?我正在尋找[像這樣](https://en.wikipedia.org/wiki/Linked_list#Tradeoffs)。例如,當你說出隊操作的出隊速度比矢量速度快時,你是根據經驗說出還是在文檔中指定的地方? – northerner