C++에서 lexicographical_compare()
함수를 사용하여 문자열을 정렬 할 수있는 방법이 있습니까?lexicographical_compare() 함수로 정렬
STL 정렬로 할 수 있지만 내 질문은 lexicographical_compare()
함수에 대한 것입니다.
C++에서 lexicographical_compare()
함수를 사용하여 문자열을 정렬 할 수있는 방법이 있습니까?lexicographical_compare() 함수로 정렬
STL 정렬로 할 수 있지만 내 질문은 lexicographical_compare()
함수에 대한 것입니다.
문자열을 정렬하는 데 std::lexicographical_compare
이 필요하지 않습니다.
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string s("qwertyuioplkjhgfdsazxcvbnm");
std::cout << s << "\n";
std::sort(s.begin(), s.end());
std::cout << s << "\n";
}
같은 문자열의 컬렉션을 정렬에 적용 : 문제는 제대로 나가셨입니다
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int main()
{
std::vector<std::string> v{"apple" , "Apple" ,"AppLe" , "APPLe"};
for (const auto& s : v)
std::cout << s << " ";
std::cout << "\n";
std::sort(v.begin(), v.end());
for (const auto& s : v)
std::cout << s << " ";
std::cout << "\n";
}
나는 이미 STL 정렬로 할 수 있다고 말했지만, 여기 ** lexicographical_compare() ** 함수로 정렬 할 수있는 방법이 있다면 생각했다. –
@StuartJecoroxy 왜 그렇게하고 싶습니까? 정렬은 이미 사전 식으로 수행됩니다. – juanchopanza
사실 나는 기능을 가지고 놀고 싶습니다 ......... –
당신은 방금 std::sort
알고리즘이 필요합니다. 물론 std::lexicographical_compare
은 아무 것도 수정하지 않으므로 정렬하려면 std::lexicographical_compare
을 사용할 수 없습니다. 어쨌든 std::sort
(또는 이에 상응하는 것)을 사용해야합니다. "에 대한 정답 방법 operator<
std::string
에서의이 사전 편찬 비교이기 때문에 당신이 전적으로 종류 std::string
s의 컨테이너가 std::sort(vec.begin(), vec.end())
입니다 않습니다. 귀하의 질문에 당신이 종류의 방법을 다양합니까의 폭 넓은 질문의 예입니다 가정에
(당신이 std::sort
의 동작을 변경하는 사용자 정의 비교 함수 객체를 사용 어떻게의 문제가 정말 더) 사전 식 순서에 용기를, 당신은 단지 비교 연산자와 std::sort
를 제공 예를 들면 다음과 같습니다.
// A function objecto to do lexicographical comparisons
template <typename Container>
bool LexCompare(const Container& a, const Container& b) {
return std::lexicographical_compare(a.begin(), a.end(),
b.begin(), b.end());
}
// Use that comparison function to sort a range:
template <typename ContainerIterator>
void sort_by_lexicographical_comapre(ContainerIterator beg,
ContainerIterator end)
{
std::sort(beg, end, LexCompare<typename ContainerIterator::value_type>);
}
int main() {
std::vector<std::string> v;
v.push_back(std::string());
v[0].push_back('1');
v[0].push_back('3');
v[0].push_back('0');
v.push_back(std::string());
v[1].push_back('1');
v[1].push_back('3');
sort_by_lexicographical_comapre(v.begin(), v.end());
for (int i = 0; i != v.size(); ++i) {
std::cout << v[i] << "\n";
}
return 0;
}
에게 당신을 위의 내용을 v
(으)로 변경할 수 있습니다. 유형이 std::vector<std::vector<int> >
이고 정수를 푸시 백으로 푸시하면 여전히 작동합니다.
C++의 문자열은 기본적으로 사전 식으로 비교됩니다. ** 정확히 ** 당신이하고 싶은 것에 대한 자세한 정보를 제공하십시오. 몇 가지 예제 입력 및 출력을 제공 할 수도 있습니다. –
"apple", "Apple", "AppLe", "APPLe"등의 문자열이 있다고 가정합시다. 이제는 사전 식으로 정렬하고 싶습니다. –
Sort는 이미 사전 식으로 정렬합니다. –