vector<TGlobalIndex> one, two, res;
one.push_back( 10 );
one.push_back( 11 );
one.push_back( 9 );
two.push_back( 8 );
two.push_back( 9 );
two.push_back( 6 );
cout << "vector one:" << endl;
printIndex( one );
cout << "vector two:" << endl;
printIndex( two );
cout << "Sorting..." << endl;
sort( one.begin(), one.end() );
sort( two.begin(), two.end() );
cout << "vector one:" << endl;
printIndex( one );
cout << "vector two:" << endl;
printIndex( two );
res.reserve( 3 );
cout << "result:" << endl;
set_intersection( one.begin(), one.end(), two.begin(), two.end(), res.begin() );
printIndex( res );
Работа с set_intersection
Код:
При работе на экран выводится:
Код:
vector one:
Hi: 0 Low: 10
Hi: 0 Low: 11
Hi: 0 Low: 9
vector two:
Hi: 0 Low: 8
Hi: 0 Low: 9
Hi: 0 Low: 6
Sorting...
vector one:
Hi: 0 Low: 9
Hi: 0 Low: 10
Hi: 0 Low: 11
vector two:
Hi: 0 Low: 6
Hi: 0 Low: 8
Hi: 0 Low: 9
result:
Hi: 0 Low: 10
Hi: 0 Low: 11
Hi: 0 Low: 9
vector two:
Hi: 0 Low: 8
Hi: 0 Low: 9
Hi: 0 Low: 6
Sorting...
vector one:
Hi: 0 Low: 9
Hi: 0 Low: 10
Hi: 0 Low: 11
vector two:
Hi: 0 Low: 6
Hi: 0 Low: 8
Hi: 0 Low: 9
result:
Вопрос: почему в результате не получается получить пересечение векторов? Вроде бы сортировка работает - значит, с операцией '<' проблем нет. Да и вообще эта операция была тщательно проверена. Но почему же тогда set_intersection возвращает пустоту? Или я его неправильно использую?
P.S. Вдогонку код для printIndex()
Код:
void printIndex( const vector<TGlobalIndex>& inp )
{
vector<TGlobalIndex>::const_iterator iter;
for( iter = inp.begin(); iter != inp.end(); ++iter ) {
cout << "Hi: " << iter->DI_Hi << " Low: " << iter->DI_Low << endl;
}
}
{
vector<TGlobalIndex>::const_iterator iter;
for( iter = inp.begin(); iter != inp.end(); ++iter ) {
cout << "Hi: " << iter->DI_Hi << " Low: " << iter->DI_Low << endl;
}
}
Вроде бы в нем ничего такого нет...
P.P.S. TGlobalIndex - это класс восьмибайтовых целых чисел. Hi - старшее двойное слово, Low - младшее.
Вот тупость...