stl의 binary_search함수를 한번 써보고 싶습니다.
글쓴이: gugudan / 작성시간: 월, 2005/01/17 - 8:06오전
#include <list>
#include <algorithm>
#include <iterator>
struct _DATA
{
public:
int x;
int y;
int operator < (_DATA & data)
{
return (x < data->x);
}
//bool operator<(const _DATA& r) const { return x < r.x ? true : false;}
};
int main()
{
list<_DATA> m_data;
_DATA data;
data.x = 1;
data.y = 2;
m_data.push_back(data);
_DATA data2;
data2.x=3;
data2.y=4;
bool finder = std::binary_search(m_data.begin(),m_data.end(),data2);
return 1;
}
이런식으로 하는게 아닌가요?
예제들을 보면..
전부 그냥 int형 변수를 search 하는거 밖에 보이질 않네요..
그럼 수고하십시요.
Forums:


말씀하신데로 사용하시면 임의의 자료형에 대해서 사용가능하고요.bi
말씀하신데로 사용하시면 임의의 자료형에 대해서 사용가능하고요.
binary_search는 컨테이너가 sort되어 있다는 가정에서 사용하는 것도 기억하셔야합니다.
Life rushes on, we are distracted
bool operator < ([b]const[/b] _DATA &
bool operator < (const _DATA & data)
로 바꾸세요.
에러가 나오네요..
find_list.cpp: In method `int _DATA::operator< (const _DATA &)':
find_list.cpp:11: base operand of `->' has non-pointer type `const
_DATA'
/usr/include/g++-3/stl_algo.h: In function `bool binary_search
(_ForwardIter, _ForwardIter, const _Tp &) [with _ForwardIter =
_List_iterator<_DATA, _DATA &, _DATA *>, _Tp = int]':
find_list.cpp:32: instantiated from here
/usr/include/g++-3/stl_algo.h:1927: no match for `const int & < _DATA
&'
/usr/include/g++-3/stl_algo.h: In function `_ForwardIter __lower_bound
(_ForwardIter, _ForwardIter, const _Tp &, _Distance *) [with
_ForwardIter = _List_iterator<_DATA, _DATA &, _DATA *>, _Tp = int,
_Distance = ptrdiff_t]':
/usr/include/g++-3/stl_algo.h:1750: instantiated from `lower_bound (_ForwardIter, _ForwardIter, const _Tp &) [with _ForwardIter = _List_iterator<_DATA, _DATA &, _DATA *>, _Tp = int]'
/usr/include/g++-3/stl_algo.h:1926: instantiated from `binary_search (_ForwardIter, _ForwardIter, const _Tp &) [with _ForwardIter = _List_iterator<_DATA, _DATA &, _DATA *>, _Tp = int]'
find_list.cpp:32: instantiated from here
/usr/include/g++-3/stl_algo.h:1735: no match for `_DATA & < const int
&'
find_list.cpp:10: candidates are: int _DATA::operator< (const _DATA &)
윽... 답변에서 함수 프로토타입이 잘못 됐군요. 그리고 함수 인자는 참
윽... 답변에서 함수 프로토타입이 잘못 됐군요. 그리고 함수 인자는 참조형이므로
->가 아니라 . 으로 해야 합니다.
struct _DATA { bool operator < (const _DATA & data) const { return (x < data.x); } };operator는 class의 memeber 함수로 만드는 것보다는 fr
operator는 class의 memeber 함수로 만드는 것보다는 friend 함수로 만드는 습관을 들이는게 어떨까요?
계속 물어보기만 하네요..
list<_DATA>::iterator pos = find(m_data.begin(),m_data.end(),1);
왜 이런식으로 했는데 에러가 발생하는지 모르겠네요..
값을 어떻게 줘야 하는지요?
위와 같이 해도 에러가 나오고
_DATA data2;
data2.x=3;
data2.y=4;
list<_DATA>::iterator pos = find(m_data.begin(),m_data.end(),data2)
이렇게 해도 에러가 나오네요.
어떤 값을 찾기 위해서는 두 값을 비교하는 연산이 필요한데, find는
어떤 값을 찾기 위해서는 두 값을 비교하는 연산이 필요한데, find는 동일함(equality),
binary_search 같이 정렬과 관련이 있는 알고리듬이나 컨테이너는 strict weak
ordering에 의한 동등함(equivalence)이 기준입니다. 따라서 binary_search를
사용하려면 < 연산이, find를 쓰려면 == 연산이 정의되어야 합니다.
struct _DATA { bool operator==(const _DATA& r) const { return x == r.x && y == r.y; } };감사합니다.
많은 도움 되었습니다.
댓글 달기