지도 컨테이너가 있습니다. find_if를 사용하여 사용자 지정 검색 값보다 큰 첫 번째 값을 반환하는 방법은 다음과 같습니다.지도 컨테이너에서 사용자 지정 값보다 큰 첫 번째 값을 찾습니다.
std::map<string, int>::iterator it = find_if(Mymap.begin(), Mymap.end(), ......
대단히 고마워요! 람다로
지도 컨테이너가 있습니다. find_if를 사용하여 사용자 지정 검색 값보다 큰 첫 번째 값을 반환하는 방법은 다음과 같습니다.지도 컨테이너에서 사용자 지정 값보다 큰 첫 번째 값을 찾습니다.
std::map<string, int>::iterator it = find_if(Mymap.begin(), Mymap.end(), ......
대단히 고마워요! 람다로
:
int n = MYVALUE;
auto it = std:: find_if(Mymap.begin(), Mymap.end(),
[n](const std::pair<std::string, int> & x) -> bool
{ return x.second > n; }
);
을 술어 (값은 람다 체내 직접 넣을 수 고정됩니다.)
struct Finder
{
Finder(int n_) : n(n_) { }
int n;
bool operator()(const std::pair<std::string, int> & x) const
{
return x.second > n;
}
};
std::find_if(Mymap.begin(), Mymap.end(), Finder(MYVALUE));
답장을 보내 주셔서 감사합니다. 하지만 내 컴파일러는 lamda 함수를 지원하지 않습니다. – GoldenLee
컴파일러는 몇 살입니까? 그런 다음 술어를 사용하십시오. 그것은 똑같은 일을합니다. –
어쩌면 당신은 operator() –
C의 + 들어 +03 비교 객체를 제공하거나 까다로운 바인딩을 처리해야합니다.
typedef map<string, int>::value_type Value;
struct Comp
{
Comp(int v) : m_v(v) { }
bool operator()(const Value& v) const
{
return v.second > m_v;
}
int m_v;
};
void f()
{
map<string, int> Mymap;
map<string, int>::iterator it = find_if(Mymap.begin(), Mymap.end(), Comp(42));
}
친애하는 Alexander Poluektov 대단히 감사합니다! 이제 작동합니다. – GoldenLee
컨테이너를 통해 기준보다 큰 값을 가진 항목에 대한 선형 검색을 수행 하시겠습니까?
upper_bound
을 호출 할 수있는 정렬 된 값의 별도 색인을 유지하여 요소 수에 선형이 아닌 대수 시간으로 수행하는 것이 좋습니다. 대신 번갈아 boost::multi_index
을 조사하십시오.
B.Stroustrup 책은 STL 기능과 관련하여 매우 유용 할 수 있습니다. 그리고 그는이 코드 제안 : 장에서
bool gt_42 (const pair <const string ,int>& r)
{
return r.second >42 ;
}
void f (map <string,int >& m)
{
typedef map <string ,int >:: const_iterator MI ;
MI i = find_if (m.begin(), m.end(), gt_42);
// ...
}
의 (.pdf 파일에서 사용 가능) "표준 라이브러리의 투어는"표준인가 : 절대적으로 필요 find_if를? 그렇지 않다면 마크 B의 대답은 빠릅니다. –