以下代碼運行良好,沒有問題,但想知道是否可以使用 boost::iequals 重寫自定義比較運算子,它比較而不轉換為大寫。
std::string copyToUpper(std::string s)
{
std::transform(s.begin(),s.end(),s.begin(),::toupper);
return s;
}
struct caseInsensitiveCompare {
bool operator() (const std::string& a, const std::string& b) const {
return (copyToUpper(a).compare(copyToUpper(b)) < 0);
}
};
std::set<std::string, caseInsensitiveCompare> keys;
uj5u.com熱心網友回復:
幾乎所有的 STL 容器都依賴于嚴格的弱排序。所以比較函式需要回傳,不是字串是否相等,而是那個比另一個“少”。但是boost::iequals檢查是否相等,而不是一個字串是否“小于”另一個字串,因此您不能將其用于映射、集合或排序函式的比較器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/436700.html
