Wednesday 6 December 2017

c++ - Template Compare iterator

I have a class that is declared as follows
comparator:



 template             _Type, typename _Comparator = std::equal_to
>
class CSearch {
public:
CSearch() :
comp(_Comparator()) {
};

CSearch(const _Comparator
&_cmp) : comp(_cmp) {
};
void Add(int id, const _Type &
needle);
set Search(const _Type & hayHeap) const;

protected:
_Comparator comp;
vector _Type> > m_Db;
};

template typename _Comparator>
void CSearch<_Type, _Comparator>::Add(int id,
const _Type& needle) {
m_Db.push_back(pair(id,
needle));
}

template _Comparator>
set CSearch<_Type, _Comparator>::Search(const
_Type & hayHeap) const {
set s_search;
typename
vector< pair >::const_iterator it;
typename
_Type::const_iterator hayStackIterator;

for (hayStackIterator =
hayHeap.begin(); hayStackIterator != hayHeap.end(); ++hayStackIterator){

for(it=m_Db.begin(); it!=m_Db.end(); ++it){
if(comp(*it,
*hayStackIterator))
s_search.insert(it->first);
}

}
return
s_search;
}

//-------------------
int main(int
argc, char** argv) {

CSearch test1;

test1 . Add ( 0, "hello" );
test1 . Add ( 1, "world" );
test1 .
Add ( 2, "rld" );
test1 . Add ( 3, "ell" );
test1 . Add ( 4,
"hell" );
printSet ( test1 . Search ( "hello world!" ) );
// 0, 1,
2, 3, 4
printSet ( test1 . Search ( "hEllo world!" ) );
// 1,
2

CSearch &)> test2 ( upperCaseCompare );
test2 . Add ( 0, "hello" );

test2 . Add ( 1, "world" );
test2 . Add ( 2, "rld" );
test2 . Add
( 3, "ell" );
test2 . Add ( 4, "hell" );
printSet ( test2 . Search
( "HeLlO WoRlD!" ) );
// 0, 1, 2, 3, 4
printSet ( test2 . Search (
"hallo world!" ) );
// 1, 2

CSearch CharComparator> test3 ( CharComparator ( false ) );
test3 . Add ( 0,
"hello" );
test3 . Add ( 1, "world" );
test3 . Add ( 2, "rld"
);
test3 . Add ( 3, "ell" );
test3 . Add ( 4, "hell" );

printSet ( test3 . Search ( "heLLo world!" ) );
// 0, 1, 2, 3, 4

printSet ( test3 . Search ( "Well, templates are hell" ) );
return
0;

}


The
Search function does not translate
condition:



if(comp(*it,
*hayStackIterator))...


Can
you help?



Translate
error:





main.cpp:101:44: instantiated from here main.cpp:55:13: error: no

match for call to ‘(const std::equal_to) (const std::pair >&, const
char&)’
/usr/include/c++/4.6/bits/stl_function.h:205:12: note: candidate
is:
/usr/include/c++/4.6/bits/stl_function.h:208:7: note: bool

std::equal_to<_Tp>::operator()(const _Tp&, const _Tp&) const [with
_Tp
= char] /usr/include/c++/4.6/bits/stl_function.h:208:7: note: no known
conversion for argument 1 from ‘const std::pair >’ to ‘const char&’ main.cpp: In
member
function ‘std::set CSearch<_Type,
_Comparator>::Search(const
_Type&) const [with _Type =
std::basic_string, _Comparator = bool (*)(const char&, const char&)]’:
main.cpp:112:44: instantiated
from here main.cpp:55:13: error: invalid
initialization of reference
of type ‘const char&’ from expression of type
‘const std::pair >’ main.cpp: In member function ‘std::set

CSearch<_Type, _Comparator>::Search(const _Type&) const [with _Type
=
std::basic_string, _Comparator = CharComparator]’:

main.cpp:123:44: instantiated from here main.cpp:55:13: error: no
match for
call to ‘(const CharComparator) (const std::pair >&, const char&)’
main.cpp:64:7: note:
candidate is: main.cpp:69:16: note: bool

CharComparator::operator()(const char&, const char&) const

main.cpp:69:16: note: no known conversion for argument 1 from ‘const

std::pair >’ to ‘const char&’ main.cpp:
In member function ‘std::set
CSearch<_Type,
_Comparator>::Search(const _Type&) const [with _Type
= std::vector, _Comparator = std::equal_to]’: main.cpp:134:52:
instantiated
from here main.cpp:55:13: error: no match for call to
‘(const std::equal_to)
(const std::pair >&,
const int&)’
/usr/include/c++/4.6/bits/stl_function.h:205:12: note:
candidate is:
/usr/include/c++/4.6/bits/stl_function.h:208:7: note:
bool
std::equal_to<_Tp>::operator()(const _Tp&, const _Tp&) const

[with _Tp = int] /usr/include/c++/4.6/bits/stl_function.h:208:7: note:
no
known conversion for argument 1 from ‘const std::pair >’ to ‘const int&’
main.cpp: In member function
‘std::set CSearch<_Type,
_Comparator>::Search(const _Type&) const
[with _Type = std::vector
>, _Comparator =
std::equal_to >]’: main.cpp:145:53: />instantiated from here main.cpp:55:13: error: no match for call to

‘(const std::equal_to >) (const std::pair > >&, const

std::basic_string&)’
/usr/include/c++/4.6/bits/stl_function.h:205:12:
note: candidate is:
/usr/include/c++/4.6/bits/stl_function.h:208:7: note:
bool
std::equal_to<_Tp>::operator()(const _Tp&, const _Tp&)
const [with _Tp
= std::basic_string]
/usr/include/c++/4.6/bits/stl_function.h:208:7: note: no known
conversion for
argument 1 from ‘const std::pair > >’ to ‘const

std::basic_string&’


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...