@@ -193,14 +193,17 @@ class ColumnMapT : public ColumnMap {
193193 }
194194 const auto make_index = [](const auto & data) {
195195 std::vector<size_t > result{data.Size ()};
196- std::generate (result.begin (), result.end (), [i = 0 ] () mutable { return i++; });
196+ std::generate (result.begin (), result.end (), [i = 0 ] () mutable {return i++;});
197197 std::sort (result.begin (), result.end (), [&data](size_t l, size_t r) {return data[l] < data[r];});
198198 return result;
199199 };
200- const auto l_index = make_index (data_);
201- const auto r_index = make_index (other.data_ );
202- return std::equal (l_index.begin (), l_index.end (), r_index.begin (), r_index.end (),
203- [&l_data = data_, &r_data = other.data_ ](size_t l, size_t r) { return l_data[l] == r_data[r];});
200+ const auto index = make_index (data_);
201+ for (const auto & val : other.data_ ) {
202+ if (!std::binary_search (index.begin (), index.end (), val,
203+ [&data = data_](const auto & l, size_t r) {return l < data[r];})) {
204+ return false ;
205+ }
206+ }
204207 return true ;
205208 }
206209
@@ -221,14 +224,14 @@ class ColumnMapT : public ColumnMap {
221224
222225 template <typename T>
223226 inline void Append (const T& value) {
224- using BaseIter = typename T::const_iterator ;
227+ using BaseIter = decltype (value. begin ()) ;
225228 using KeyOfT = decltype (std::declval<BaseIter>()->first );
226229 using ValOfT = decltype (std::declval<BaseIter>()->second );
227230 using Functor = std::function<std::tuple<KeyOfT, ValOfT>(const BaseIter&)>;
228231 using Iterator = ProjectedIterator<Functor, BaseIter>;
229232
230233 Functor functor = [](const BaseIter& i) {
231- return std::make_tuple (i->first , i->second );
234+ return std::make_tuple (std::cref ( i->first ), std::cref ( i->second ) );
232235 };
233236
234237 typed_data_->Append (Iterator{value.begin (), functor}, Iterator{value.end (), functor});
0 commit comments