당신이 문자열의 벡터가되었다가 아니라 그 전에 후이를 정렬 할 왜 질문은 정말이다.
int를 포함하는 문자열의 벡터를 정렬하는 가장 간단한 방법은 정수로 변환하고 정렬 한 다음 다시 첫 번째 벡터로 문자열로 변환하는 것일 수 있습니다. 그렇지 않은 경우보다 효율적일 수 있습니다. 처음부터 문자열로 변환하십시오.
비교기 내에서 즉석에서 int
으로 변환하라는 제안과 관련하여 비용이 많이 듭니다. int
을 비교하는 것은 string
에서 int
으로의 변환 프로세스와 비교하면 사소합니다. 정렬 방식은 O(N log N)
(예상)입니다. 전환 수를 O(N log N)
회 전환하면 즉시 전환 할 경우 O(N)
번으로 전환하고 O(N log N)
번만 int
번으로 비교하면됩니다.
알고리즘을 수공예로 만들어 비교할 수도 있습니다. 모든 값이 양수이고 선행 0이 없다고 가정하면 문자열로 표시된 숫자는 길이가 더 짧은 문자열로 표시된 다른 숫자보다 큽니다. 당신은 comparisson 기능을 구축하는 것을 사용할 수 : 0을 선도가있을 경우
struct Compare {
bool operator()(std::string const & lhs, std::string const & rhs) const {
return lhs.size() < rhs.size()
|| (lhs.size() == rhs.size() && lhs < rhs);
}
};
, 얼마나 많은 선행 0을 찾아 비교기 내부 따라 size
을 조정 간단합니다. 숫자가 음수 일 수 있다면 부호를 감지하도록 비교기를 확장 한 다음 위의 비교와 비슷한 것을 적용 할 수 있습니다.
정렬 알고리즘의 성능이 얼마나 중요합니까? 쉬운 대답은'boost :: lexical_cast'와 같은 것을 사용하여 기본 정수 값을 정렬하는 것입니다. – Chad
아마도 문자열 비교를하고있을 것입니다. 여전히 int의 벡터 인 동안 정렬 할 수 있습니까? – Ben
@Chad별로 중요하지 않습니다. 이것은 아주 작은 벡터입니다. 최대 20 개의 요소를 보유 할 수 있습니다. – Gundown64