我有一個巨大的STL容器std::string
(數十萬條目)。目前我正在使用vector
,但我很樂意改變。內容按字母順序排序,由字母小寫字母a-z 加ñ
組成。查找在有序STL容器中以前綴開頭的所有字符串(非低位ASCII)
我想實現一個函數,它接收一個const std::string& prefix
並返回一對迭代器,一個指向以這樣的前綴開頭的第一個元素,另一個指向最後一個。如果沒有字符串匹配條件,則返回任意兩個相同的迭代器。我在查找時需要效率,因爲矢量很大,所以我想利用它爲二進制搜索進行排序。
我認爲std::lower_bound
是我正在尋找,但我缺少一個函數來比較std::string
s可以處理西班牙ñ
。
你使用的是UTF-8嗎?只要你在你的搜索前綴字符串中使用與你在向量中使用的相同的編碼,你應該沒問題。爲了提高速度,您可以將前綴長度捕獲到lambda中,並調用'std :: string :: compare'的適當重載。 – paddy
您可以編寫自定義比較函數以傳遞給'lower_bound()',但是您執行的任何比較都必須考慮字符集/區域設置,因爲「ñ」不是ASCII。 'std :: string'只知道'char'值,並沒有字符集/區域設置的概念,所以你需要手動處理它。在不同的字符集中''可以是不同的'char'值,在某些字符集中它根本不存在。 –