2014-09-19 42 views
0

我有兩個表示SSID的二進制數據緩衝區。 SSID不是字符串,可以做一些事情,比如中間有一個空字符。我想字典順序排序的SSID列表:C++中二進制數據(具有不同長度)的字典順序

\0\0\0\0 
AccessPointA 
AccessPointB 
AccessPointB\0 
ZZZZ 

我已經有這只是需要一個<0, 0, >0結果進行比較(因此,如果它是一個字符串,它可以使用strcmp)的框架。

但是,由於兩個SSID不一定是相同的長度,所以我不能直接使用memcpy,而且我也不希望必須分配緩衝區並使用空值填充兩者。

有沒有一種有效的方法來按字典順序比較兩個任意長度的緩衝區?

+1

[std :: lexicographical_compare](http://www.cplusplus.com/reference/algorithm/lexicographical_compare/)? – 2014-09-19 10:31:58

回答

2
std::sort(std::begin(Container), std::end(Container), [](SSID const& Lhs, SSID const& Rhs){ return std::lexicographical_compare(std::begin(Lhs), std::end(Lhs), std::begin(Rhs), std::end(Rhs)); });