티스토리 뷰
find_if() 사용하기 위해 #include <algorothm> 필요하다.
#include <vector>
#include <algorothm>
struct _struct뉴스
{
CString str종목코드;
CString str검색어;
};
std::vector<_struct뉴스>::iterator result2 = std::find_if(m_vstr뉴스종목.begin(), m_vstr뉴스종목.end(),
[str종목코드, str검색어](_struct뉴스 뉴스) // 인수 struct뉴스는 fnd_if 루프 실행하는 동안 요소 값
{
return 뉴스.str검색어 == str검색어 && 뉴스.str종목코드 == str종목코드;
}
);
if (result2 == m_vstr뉴스종목.end())
{
_struct뉴스 struct뉴스;
struct뉴스.str검색어 = str검색어;
struct뉴스.str종목코드 = str종목코드;
m_vstr뉴스종목.push_back(struct뉴스);
str종목명 = theApp.m_map종목정보[str종목코드].str종목명;
Msg화면출력(str종목명, strTitle);
텔레그램전송(str종목명 + TEXT(" : ") + strTitle);
}
std::vector<_struct뉴스>::iterator result2 = std::find_if(벡터시작위치, 벡터 마지막위치, 람다함수);
람다함수는
[참조할변수](벡터자료형)
{
return 조건식;
}
); // 조건식이 처음으로 참인 iterator 를 반환, 만약, 벡터안에서 참인 조건을 찾지 못하면 벡터 마직막위치 (find_if 두번쩨 인수) 값을 반환한다.
find_if() 는 아래 코드와 같다.
BOOL bFlag = FALSE;
for (_struct뉴스 struct뉴스 : m_vstr뉴스종목) // 중복뉴스 검사
{
if (struct뉴스.str종목코드 == str종목코드 && struct뉴스.str검색어 == str검색어)
{
bFlag = TRUE;
break;
}
}
if (bFlag == FALSE) // 뉴스 중복 아닌경우
{
_struct뉴스 struct뉴스;
struct뉴스.str검색어 = str검색어;
struct뉴스.str종목코드 = str종목코드;
m_vstr뉴스종목.push_back(struct뉴스);
str종목명 = theApp.m_map종목정보[str종목코드].str종목명;
Msg화면출력(str종목명, strTitle);
텔레그램전송(str종목명 + TEXT(" : ") + strTitle);
}