[파일명: testStringFindInList.cpp]------------------------------------------------
#include <iostream>
#include <functional>
#include <algorithm>
#include <string>
#include <list>
using namespace std;
struct SData {
SData(string s) : m_s(s) {}
string m_s;
};
namespace std {
template <> struct greater<SData*> {
bool operator()(SData const* p1, SData const* p2) {
//Defined like less for ascending sorting
if(!p1)
return true;
if(!p2)
return false;
return p1->m_s < p2->m_s;
}
};
};
// Predicate class
class MyPred {
private:
std::string m_strForFind;
public:
// for find_if
void setQuery(std::string str) {
m_strForFind = str;
};
// operator override for find_if
bool operator()(SData const* p) {
if(!p)
return false;
int n = (p->m_s).find(m_strForFind);
int m = (p->m_s).length();
return n >= 0 && n < m;
};
};
void printList(list<SData*> lst);
int main() {
list<SData*> mylist;
mylist.push_back(new SData("하나"));
mylist.push_back(new SData("둘"));
mylist.push_back(new SData("셋"));
mylist.push_back(new SData("넷"));
mylist.push_back(new SData("다섯"));
mylist.push_back(new SData("여섯"));
cout << "list: ";
printList(mylist);
MyPred pred;
pred.setQuery("셋");
list<SData*>::iterator it;
it = find_if(mylist.begin(), mylist.end(), pred);
if (it != mylist.end()) {
cout << "발견! ";
cout << "Next word of 셋 in list: " << (*(++it))->m_s << endl;
}
// Sorting list in ascending order
cout << "Sorting..." << endl;
mylist.sort(greater<SData*>());
cout << "list: ";
printList(mylist);
it = find_if(mylist.begin(), mylist.end(), pred);
if (it != mylist.end()) {
cout << "발견! ";
cout << "Next word of 셋 in list: " << (*(++it))->m_s << endl;
}
for (it = mylist.begin(); it != mylist.end(); it++)
delete *it;
return 0;
}
void printList(list<SData*> lst) {
list<SData*>::iterator it;
list<SData*>::iterator it2;
cout << "[";
for (it = lst.begin(); it != lst.end(); it++) {
it2 = it;
advance(it2, 1);
if (it2 == lst.end())
break;
cout << (*it)->m_s << ", ";
}
if (lst.size() > 0)
cout << (*it)->m_s;
cout << "]" << endl;
}
------------------------------------------------
Visual C++의 경우:
컴파일> cl /EHsc testStringFindInList.cpp
또는
Borland C++의 경우:
컴파일> bcc32 testStringFindInList.cpp
또는
Cywin이나 Msys의 g++의 경우:
컴파일> g++ -o testStringFindInList testStringFindInList.cpp
실행> testStringFindInList
list: [하나, 둘, 셋, 넷, 다섯, 여섯]
발견! Next word of 셋 in list: 넷
Sorting...
list: [넷, 다섯, 둘, 셋, 여섯, 하나]
발견! Next word of 셋 in list: 여섯
Cywin이나 Msys의 g++의 경우:
실행> ./testStringFindInList
list: [하나, 둘, 셋, 넷, 다섯, 여섯]
발견! Next word of 셋 in list: 넷
Sorting...
list: [넷, 다섯, 둘, 셋, 여섯, 하나]
발견! Next word of 셋 in list: 여섯
'프로그래밍 > C++' 카테고리의 다른 글
명령행 인자 처리 예제 for .NET with C++/CLI (0) | 2009.04.29 |
---|---|
Hello 예제 for .NET with C++/CLI (0) | 2009.04.29 |
스트링 벡터에서 스트링 찾기(find) with C++ STL (0) | 2009.04.22 |
스트링 배열에서 스트링 찾기(find) with C++ STL (0) | 2009.04.22 |
스트링 배열 정렬(sorting)하기 for .NET with Visual C++ (0) | 2009.04.20 |