방금 STL에서 STL에 대해 this lecture을 보았습니다.여러 인수 λ 식에 전달 된 매개 변수
예상대로#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main()
{
std::vector<std::string> v;
v.push_back("cat");
v.push_back("antelope");
v.push_back("puppy");
v.push_back("bear");
std::sort(v.begin(), v.end(),
[](const std::string& left, const std::string& right)
{
return left.size() < right.size();
}
);
for (std::vector<std::string>::iterator i = v.begin(); i != v.end(); ++i)
{
std::cout << *i << " ";
}
std::cout << std::endl;
return 0;
}
, 이것은 자신의 길이가 증가하는 순서로 벡터에서 문자열을 인쇄 : 강의 57 분 정도
, 우리는이 코드가 있습니다. 제 질문은 sort
함수의 세 번째 인수 인 람다 식에 대한 것입니다. 내부적으로 입력 매개 변수 'left'& 'right'로 전달되는 것은 무엇입니까?
std::cout << "left: " << left << ", right: " << right << std::endl;
람다의 몸 내부를, 그리고 내가 가진 출력했다 :
왼쪽 : 오른쪽 영양 : 고양이
왼쪽 : 영양, 오른쪽 : 고양이
왼쪽 : 강아지, 오른쪽 : 고양이
왼쪽 : 강아지, 오른쪽 : 영양
왼쪽 : 강아지, 오른쪽 : 고양이
왼쪽 : 곰, 오른쪽 : 고양이
왼쪽 : 오른쪽 곰 : 영양
왼쪽 : 곰, 오른쪽 : 강아지
왼쪽 : 곰, 오른쪽 : 고양이
곰 강아지 영양
그래서는 '왼쪽과 같은 고양이 '및'오른쪽 '인수는 어떻게 든 내부 정렬 알고리즘과 관련되어 있습니다. 누구가 정확히 무슨 일이 일어나고 있는지 더 많은 것을 밝힐 수 있습니까?
람다가 단항 함수 인 경우 입력 인자는 반복자가 현재 가리키고있는 것이었을 것이라는 것을 이해했습니다. 이 올바른지?
그러나 이진 함수를 사용하면 입력 인수가 문제가됩니다.
내가 누락되었거나 왜 * 두 가지를 비교하는 비교 함수가 * 두 개의 매개 변수를 필요로하는지 묻고 있습니까? 정렬 알고리즘이 실행되는 동안 자주 항목을 비교하여 "순서"가 올바른지 확인하고 ** 항목 **에 ** s **를 강조합니다. – WhozCraig
나는 비교 함수가 두 가지를 필요로한다는 것을 이해한다.내 질문은 '두 가지가 비교 자로 전달되는 것이며, 가능한 경우'어떻게 '인가하는 것입니다. 다른 말로하면, 프로그래머로서, 나는 람다 안에서 수행 할 수표를 결정할 수 있도록 입력 인수로 무엇을 얻을 것으로 기대할 수 있는가? – Gautam
@ Gautam Ah. 당신은 당신의 순서대로 무엇이든 기대할 수 있습니다. 언제, 어떤 방법으로 나타날지는 전적으로 사용되는 알고리즘에 달려 있습니다. 특히 복잡한 객체의 여러 필드 값을 기반으로하는 명령을 작성하는 경우 철저히 엄격한 약한 정렬 개념을 완전히 이해하는 것이 좋습니다. – WhozCraig