3
우분투 14.04, g ++ 4.9.3입니다.배열의 벡터에서 std :: find를 사용하는 방법은 무엇입니까?
std::vector<std::array<int, 3>> a;
a.push_back({2, 3, 1});
a.push_back({1, 3, 4});
a.push_back({3, 1, 2});
auto it = std::find(a.begin(), a.end(), {2, 3, 1});
아래의 코드는 내가이 문제를 해결하기 위해 람다 함수와 표준 : : find_if를 사용하는보다 정교한 방법을 알아 낸 몇 가지 인터넷 검색 세션 후 오류
couldn't deduce template parameter ‘_Tp’
std::find(a.begin(), a.end(), {2, 3, 1});
^
을 반환하지만 왜 아무튼 이 코드는 작동하지 않습니까?
와우 ... 푸시 백이이 장황함이 필요없이 작동하기 때문에 혼란 스럽습니다. 당신의 대답을 받아 들일 것입니다. – user3667089
@ user3667089'push_back'은 매개 변수 유형이 호출 된 표현식의 유형에서 추론 될 수 있기 때문에 작동합니다. –
push_back의 경우'std :: initializer_list' 매개 변수 유형이 알려져 있으므로 이니셜 라이저 목록을 적절한'std :: initializer_list'로 직접 추론 할 수 있습니다. 'std :: find'로는 그다지 간단하지 않습니다. 왜냐하면 세 번째 인자는 초기화 인자 목록이 아닌 일반 템플릿 인자이기 때문입니다; 그러므로 그것은 추론 될 수 없다. –