계산 집약적 인 프로그램을 작성하려고합니다. 그리고 multi_index_container의 composite_key_compare에 대한 comparsion의 필드가 char *가 필요합니다. 그러나, 그것은 작동하지 않는 것 같습니다. 아래 코드 :boost multi_index_container composite_key_compare
struct MyStruct
{
char* firstName;
char* secondName;
int age;
};
struct equal_char
{ // functor for operator<=
inline bool operator()(const char* left, const char* right) const
{ // apply operator<= to operands
bool result=(strcmp(left,right)==0);
return result;
}
};
typedef composite_key
<MyStruct*,
BOOST_MULTI_INDEX_MEMBER(MyStruct, char*, firstName),
BOOST_MULTI_INDEX_MEMBER(MyStruct, char*, secondName)
> comp_key;
typedef multi_index_container
<
MyStruct*,
indexed_by
<
ordered_unique
<
comp_key,
composite_key_compare
<equal_char, equal_char>
>
>
> MyContainer;
boost::ptr_vector<MyStruct> vec;
MyStruct* struct1=new MyStruct();
struct1->firstName="Michael";
struct1->secondName="Mike";
struct1->age=20;
vec.push_back(struct1);
MyContainer myContainer;
myContainer.insert(struct1);
char* first="Michael";
char* second="Mike";
auto it=myContainer.find(boost::make_tuple(first, second));
if(it!=myContainer.end())
cout << (*it)->age << endl;
내가 equal_char으로 추적하고, 않았는에 "마이클" "마이클"의 첫 번째 비교에 true를 돌려했던 발견, 그러나 나는 또한 equal_char이 요구되지 않는다는 것을 발견 두 번째로 "Mike"와 "Mike"를 비교합니다. 이걸 도와 줄 수있는 사람? composite_key_compare는 어떻게 작성해야합니까?