정렬 된 문자열 벡터가 있다고 가정 해 보겠습니다.
std::vector<std::string> Dictionary
Dictionary.push_back("ant");
Dictionary.push_back("anti-matter");
Dictionary.push_back("matter");
Dictionary.push_back("mate");
Dictionary.push_back("animate");
Dictionary.push_back("animal");
std::sort(Dictionary.begin(), Dictionary.end());
벡터에서 접두사와 일치하는 첫 번째 단어를 찾고 싶지만 내가 찾은 모든 예는 하드 코딩 된 문자열을 접두사로 사용합니다. 예를 들어, "an"접두사를 찾기위한 부울 단항 함수를 정의 할 수 있습니다.
bool find_prefix(std::string &S) {
return S.compare(0, 2, "an");
}
std::find_if()
첫 번째 일치에 대한 반복자를 찾기위한 함수 의 술어로 사용하십시오 . 하지만 사용자가 주어진 문자열을 접두사로 검색하려면 어떻게해야합니까? 어떤 방식 으로든 이진 술어를 사용할 수 있습니까? 아니면 변수와 매개 변수에 의존하는 "의사 단항"술어를 만드시겠습니까?
아니면이 문제에 사용해야하는 다른 컨테이너와 방법이 있습니까?
접두사 검색을 위해 사전을 저장하는 데 훨씬 더 효율적이고 우아한 구조가 있다는 것을 알고 있지만, 저는 초보자 인자가 학습 프로그래밍이므로 더 복잡한 구조로 모험하기 전에 먼저 표준 컨테이너를 사용하는 방법을 배우고 싶습니다. .
find_prefix
람다로 쓸 수 있습니다 . 이를 통해 검색하려는 문자열을 캡처하고이를 비교에 사용할 수 있습니다.
string word = ... // the prefix you're looking for
auto result = std::find_if(Dictionary.begin(), Dictionary.end(),
[&word](string const &S) {
return ! S.compare(0, word.length(), word);
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다