2012-04-08 4 views
2

재정렬 된 bool operator<(const std::string & rhs) 연산자를 사용할 때 문자열이 사전 식 비교되는지 확인하십시오. 예 :C++ : 사전 식 문자열 비교

std::string str1 = "aabbcc" 
std::string str2 = "bbaacc" 

(str1 < str2) == std::lexicographical_compare(str1.begin(),str1.end(),str2.begin(),str2.end()) // is this statement true? 
+1

예 문자열 비교가 사전 식으로 수행되지 않은 경우에는 동일하지 않습니다. – EdChum

+1

@EdChum : 실제로 말이 될 수 있습니다. 일부 로케일 비교는 사전식이 아닙니다. – jpalecek

+0

@jpalecek 흠, 그래서 나는 항상 이런 것들을 서부 (ASCII) 땅에서 생각하는 경향이 있다고 생각합니다. – EdChum

답변

6

예.

문자열의 비교 연산자의 관점에서 정의의 traits::compare (C++ 03 21.3.6.8) (즉 char_traits<char>::compare입니다) 인수 (21.1.1)의 사전 편찬 순서에 따라 값을 반환하도록 지정되어있다.

X : 비교 (P, Q, N) ... 수율 : 0의 경우 각 I [0, N), X : 당량 (p [i]는,에 Q [I]) 사실이다; [0, n]의 일부 j에 대해 X :: lt (p [j], q [j])가 참이고 각 i에 대해 [0, j) X :: lt : 0이면 음의 값 eq (p [i], q [i])는 참이다. 그렇지 않으면 양수 값.

사실상 문자열 비교는 로케일에 민감하지 않아야합니다 (광산과 같은 일부 로케일에서 사전식이 아닐 수 있음).